1

我正在尝试初始化一个包含复数双精度的 2D 动态数组。我无法弄清楚这个错误消息告诉我做什么,并且在任何地方都找不到它。

#include <complex.h> 
...
int main( int argc, char *argv[] ) {
    complex double **A;
    FILE *inputFile;
    int i;
    double numRow, numCol;

    inputFile = fopen( "input.txt", "r" );
    fscanf( inputFile, "%lf %lf", &numRow, &numCol );

    A = ((complex double)**)malloc( numRow * sizeof( (complex double)* ) );
    for( i = 0; i < numCol ; i++ ) {
        A[i] = ((complex double)*)malloc( NC * sizeof( (complex double) ) );


    for( i = 0; i < m; ++i ) {
        free( A[i] );
    }
    free( A );

我得到的错误来自调用 malloc 的两行。

gewhpp.c:58:26: error: expected expression before â)â token
gewhpp.c:60:29: error: expected expression before â)â token
4

2 回答 2

2

尝试编辑这些行,complex double如下所示:

A = (complex double**)malloc( numRow * sizeof(complex double* ));

您无需将“复双”括起来,然后放置“*”

(你的大括号还有其他一些错误,但我想那是因为这只是代码片段......)

于 2012-10-19T01:33:41.557 回答
2
A = ((complex double)**)malloc( numRow * sizeof( (complex double)* ) );
for( i = 0; i < numCol ; i++ ) {
    A[i] = ((complex double)*)malloc( NC * sizeof( (complex double) ) );

可以清理到

A = malloc(numRow * sizeof *A);
if (A)
{
  for (i = 0; i < numCol; i++)
  {
    A[i] = malloc(NC * sizeof *A[i]);
    ...

父母安置的机会减少了咬你的机会。

您不需要malloc在 C 中转换结果(C++ 是另一回事),并且可以将sizeof运算符应用于表达式,而不仅仅是类型名称。由于 的类型*Acomplex double *, 的大小与*A的大小相同(complex double *)

于 2012-10-19T01:54:34.850 回答