gpt4 book ai didi

c++ - 这段代码在哪里出现段错误?

转载 作者:太空狗 更新时间:2023-10-29 20:38:30 26 4
gpt4 key购买 nike

我的问题现在简化为一个 - 希望是 - 最小的例子,是为什么以下代码会出现段错误。

当然可以将其视为所提出问题的拷贝,前提是您找到了后者。问题是,我在最初的搜索中没有找到问题,许多新手可能也不知道错误的原因。我建议这是我本可以找到的拷贝:

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

最佳答案

段错误可能是由于数组定义造成的 double a[LDA*N]; .这将创建一个具有自动存储持续时间(“在堆栈上”)的 72MB 阵列。您有多种选择。

  1. 使用std::vector<double>使用所需大小创建或 resize()成员函数。
  2. 动态分配 std::unique_ptr<double[]>new[]/delete[] .当心,手动内存管理充满了危险。
  3. 制作数组static或全局。

关于c++ - 这段代码在哪里出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com