簡體   English   中英

這段代碼在哪里?

[英]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陣列(“在堆棧上”)。 你有幾種選擇。

  1. 使用使用所需大小或resize()成員函數創建的std::vector<double>
  2. 使用std::unique_ptr<double[]>new[]/delete[]動態分配。 請注意,手動內存管理充滿了危險。
  3. 使數組static或全局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM