[英]Where does this code segfault?
我的问题,现在简化为 - 希望 - 最小的例子,是以下代码段错误的原因。
如果您找到后者,它当然可以被视为提议问题的副本。 问题是,我在初始搜索中找不到问题,所以可能有很多新手,不知道错误的原因。 我建议将此作为我可以找到的副本:
但问题描述很长,所以我相信我的最小化和更短的代码可能更好地说明问题。 在任何情况下,它都是重复的。 我建议主持人将其设置为副本,并设置从第二个可能副本到第一个副本的链接。
#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" );
我直接放在主要的开头。
为了完整性,我运行如下代码:
ludi@ludi-M17xR4:~/Desktop/tests$ g++ -o minicombo.x minicombo.cc && ./minicombo.x
segfault可能是由于数组定义double a[LDA*N];
。 这将创建一个具有自动存储持续时间的72MB阵列(“在堆栈上”)。 你有几种选择。
resize()
成员函数创建的std::vector<double>
。 std::unique_ptr<double[]>
或new[]/delete[]
动态分配。 请注意,手动内存管理充满了危险。 static
或全局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.