【发布时间】:2014-02-02 21:24:22
【问题描述】:
我有一个用 C++ 编写的程序,用 G++ 编译,在 Ubuntu 13.04 32 位中运行,它给出了以下错误:“Segmentation fault (core dumped)”。
int main(int argc, char *argv[]){
printf("1\n");
int x = 0 , y = 0, count = 0;
printf("2\n");
char c;
printf("3\n");
int n_frames = (atoi(argv[1]) - 1);
printf("4\n");
int windowSize = WINDOW_SIZE; // WINDOW_SIZE is a define
printf("5\n");
// And the program go on....
long double frames[n_frames][377];
long double dis_frames[n_frames - (windowSize - 1)];
int tam_dis_frames = n_frames - (windowSize - 1);
long double white_top_hat[tam_dis_frames];
当“n_frames”值(由 argv[1] 带来的值)较低(测试到 300)时,不会发生错误并且一切正常。
当值更高(如 1922)时,会发生错误。当错误发生时,显示的最后一个 printf 是第四个 printf("4\n")"。
当值为 1853 或更低时,会显示 "printf("5\n")" 但不会显示下一个 printf。
有人知道什么可以解决吗?在如此简单的程序步骤中,分段错误(核心转储)的来源可能是什么......
【问题讨论】:
-
如何启动该程序?也就是说,什么是 argv[1]
-
您提供什么输入? Printg argc 和 argv 用于诊断。另外,假装你从未听说过 atoi 和 printf 并学习 C++。
-
调试此类问题的第一步是尝试使用 minimal 程序重现错误。例如。在这种情况下,请尝试删除
int n_frames...之前的所有语句。错误还会出现吗? -
last printf 未显示,因为它已被执行,但它在缓冲区中准备打印。但是段错误不在此代码中,请添加更多代码。
-
程序执行如下:./Program.exe 1922