我有这个代码:
int main() {
int i=0, n=0;
char sep=NULL;
double **aero=(double**)malloc(sizeof(double*));
*aero=(double*)malloc(2*sizeof(double));
printf("Zadejte souradnice:\n");
while (1) {
aero=(double**)realloc(aero,(n+1)*sizeof(double*));
for (i=0; i<n+1; i++) {
aero[i]=(double*)realloc(aero[i],2*sizeof(double));
}
if ((scanf("[%lf,%lf]%c",&aero[n][0],&aero[n][1],&sep))==3 && (sep=='\n' || sep==' ')) {
n++;
continue;
} else if (!feof(stdin)) {
printf("Nespravny vstup.\n");
freeArray2D(aero,n);
return 0;
}
break;
}
}
它工作正常,但我只能扫描 19 次坐标(格式:[x,y])。然后它显示段错误(核心已转储)。我使用 Linux 编译器 gcc -Wall -pedantic main.c -lm 我不知道问题出在哪里。感谢您的帮助。
最佳答案
您永远不会将新的 malloc
ed 缓冲区分配给 aero[1]
,而是将其中的垃圾传递给 realloc
。也许您希望 aero
的 realloc
将内存初始化为零?
关于有人能找出错误吗?纯 C 重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174771/