2D动态数组,填充复数

时间:2012-10-19 01:25:19

标签: c dynamic-arrays complex-numbers

我正在尝试初始化其中包含复杂双精度的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

2 个答案:

答案 0 :(得分:2)

尝试使用complex double修改这些行,如下所示:

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

您不需要围绕'复数双'括起来然后加上'*'

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

答案 1 :(得分: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]);
    ...

paren放置的机会很少让你陷入困境。

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