【发布时间】:2013-11-13 06:48:46
【问题描述】:
我有一个小的 C 程序。当我用gcc 编译它时,一切正常,但是当我尝试运行它时,我收到了这条消息:
Segmentation fault (core dumped)
我尝试使用gdb and对其进行调试,当我在main() 上放置断点并启动程序时,我在gdb 中收到此消息:
单步执行直到从没有行的函数 main 中退出 号码信息。
程序收到信号SIGSEGV,分段错误。
0x00007ffff7a56ad4 在?? () 来自 /lib/x86_64-linux-gnu/libc.so.6
这是我的 mani() 函数的开始:
int main(int argc, char **argv) {
long N;
double *A, *B, *C, t;
srand(time(NULL));
N = atoi(argv[1]);
A = (double *) malloc(N * N * sizeof(double));
B = (double *) malloc(N * N * sizeof(double));
C = (double *) malloc(N * N * sizeof(double));
matFillSimple(N, A, 1.0);
matFillSimple(N, B, 2.0);
matFillSimple(N, C, 0.0);
...
【问题讨论】:
-
可以给我们matFillSimple的代码吗?
-
N的值是多少? -
在开始使用之前,您不会检查是否有
argv[1]。这可能会导致你崩溃。在开始使用之前,您不会检查 N 是否合理。这也可能导致您崩溃。 -
另外,
atoi()返回一个int,而N是一个long。 -
@AlexReynolds:
atoi()返回int很好;这意味着您不太可能溢出数组的最大大小。它也是完全有效的;编译器将转换。
标签: c segmentation-fault