我正在尝试初始化其中包含复杂双精度的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
答案 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 *)
的大小相同。