【发布时间】:2014-11-14 10:53:21
【问题描述】:
如果我在 osx 上使用 gcc 编译此代码并运行它,它会完美运行...确实,如果我在 ubuntu(gcc 版本:4.8.2)上编译相同的代码并运行它,我有一个分段故障错误。为什么?
#include <stdio.h>
#include <stdlib.h>
#define ROW 64
#define COL 16
int readMyFile(float*, char**);
int main(int argc, char *argv[])
{
float *array;
array = (float*) malloc (ROW*COL*sizeof(float));
r = readMyFile(array,argv);
if(r) return r;
free(array);
return 0;
}
int readMyFile(float *array, char* argv[]) {
FILE *ifp;
float tmp;
short i=0;
ifp=fopen(argv[1], "r");
if(ifp==NULL)
return 1;
while(fscanf(ifp, "%f", &tmp) == 1)
{
printf("i: %d\n",i);
array[i]=tmp;
i++;
}
fclose(ifp);
return 0;
}
我在 Ubuntu 14.04 LTS 上使用命令编译上面的代码:gcc -o Test Test.c
之后,我使用以下命令运行:./Test myfile.txt
myfile.txt的内容是这样的:
-4 0 -3 -2 2 0 2 0 1 . . . 等等
在我看来,问题可能出在这一点上:matrix[i]=tmp; 为什么?
【问题讨论】:
-
你打算如何限制
array[i]中的i? -
使用调试器,即 GDB。
-
@SouravGhosh,为什么需要在数组[i] 中限制“i”?
-
@GAM 否则,它可能会超出分配的内存,产生 UB,给出 segfault,导致疼痛......
-
2000000 > 64*16 还有
short i
标签: c arrays segmentation-fault malloc ubuntu-14.04