如果有人可以帮助我完成我的“计划”,那就太好了。我正在尝试读取csv文件并将其移动到2D数组。它停在第17行(满分为200)。
int main ()
{
FILE * pFile;
double **tab;
char bufor [100];
int i=0;
tab = (double**)malloc(sizeof(double*));
pFile = fopen ("sygnal1.csv" , "r");
if (pFile == NULL) printf("Error");
else
while (fgets (bufor , 100 , pFile))
{
tab[i] = (double *) malloc(2 * sizeof(double));
sscanf(bufor, "%lf, %lf,", &tab[i][0], &tab[i][1]);
printf("%lf.%lf.\n",tab[i][0],tab[i][1]); //It's here only for testing
i++;
}
printf("number of lines read %d\n",i);
fclose (pFile);
system("PAUSE");
return 0;
}
答案 0 :(得分:0)
您尚未为tab
完全分配内存。你刚刚分配了一个(未初始化的)指针。当我> 0你进入未定义的行为。您需要至少分配与文件中可能有行数相同的元素,例如
tab = malloc(sizeof(*tab) * MAX_LINES);
或在每次迭代后使用realloc
来增加元素数量。
答案 1 :(得分:0)
tab = (double**)malloc(sizeof(double*));
您只在此数组中分配1个元素。所有其他访问都是在未分配的内存块上写入,可能会造成损坏。
定期尝试realloc
。
答案 2 :(得分:0)
您在标签中仅创建了一个双*的地方,如果您知道要存储的行数,请执行以下操作:
tab = malloc(sizeof(*tab) * NB_LINES);
另外,不要强制转换malloc。