【发布时间】:2023-03-19 03:20:01
【问题描述】:
我的问题,现在简化为一个 - 希望是最小的例子,是为什么下面的代码段错误。
如果您找到了后者,当然可以将其视为提议问题的副本。问题是,我在最初的搜索中没有找到问题,很多新手也不知道错误的原因。我建议将此作为我可以找到的副本:
Segmentation Fault before main
但是问题描述很长,所以我相信我的最小化和更短的代码可能更适合说明问题。在任何情况下,它都是重复的。 我建议版主将此设置为副本,并设置从第二个可能的副本到第一个的链接。
#include <stdio.h>
/* Parameters */
#define N 3072
#define LDA N
/* Main program */
int main() {
printf( "-----------------------------------------------> Entry main.\n" );
/* Local arrays */
double a[LDA*N];
printf( "-----------------------------------------------> End main.\n" );
return 0;
}
当
时不会发生段错误#define N 3072
替换为
#define N 5
行时也不会发生段错误
double a[LDA*N];
被省略。
我对没有到达就发生段错误的观察感到特别困惑
printf( "-----------------------------------------------> Entry main.\n" );
我直接放在main的开头。
为了完整起见,我运行如下代码:
ludi@ludi-M17xR4:~/Desktop/tests$ g++ -o minicombo.x minicombo.cc && ./minicombo.x
【问题讨论】:
-
std::ifstream这是不是 C -
@Eregrith 确实...谢谢!
-
如果您想使用输出进行调试,请使用
std::cerr(或fprintf(stderr,...,如果必须)。 -
由于您没有给我们
dsyev,我们无法重现错误。如果您准备minimal complete example,错误的原因将变得清晰。首先,如果您认为段错误发生在控制到达main()的第一行之前,请尝试删除main()的所有其他行,看看会发生什么。 -
你会立即出现段错误,因为
double a[LDA*N];在main()中创建了一个 72MB 的数组,这对于自动存储来说太大了。
标签: c++ segmentation-fault lapack