[英]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.