gpt4 book ai didi

c - 小型(ish)二维阵列的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:24 26 4
gpt4 key购买 nike

我不断使用以下代码进行 segmentation 。将 4000 更改为 1000 可使代码运行良好。我会认为我这里有足够的内存...我该如何解决这个问题?

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 4000

void initialize_mx(float mx[][MAXLEN])
{
int i, j;
float c=0;
for(i=0;i<MAXLEN;i++){
for(j=0;j<MAXLEN;j++) mx[i][j]=c;
}
}
int main(int ac, char *av[])
{
int i, j;
float confmx[MAXLEN][MAXLEN];
initialize_mx(confmx);
return 0;
}

最佳答案

问题是你溢出了堆栈。

当您调用 initialize_mx() 时,它会为其局部变量(在您的例子中为 confmx)分配堆栈空间。这个空间受您的操作系统限制(如果您使用的是 Linux,请检查 ulimit),如果局部变量太大,则可能会溢出。

基本上你可以:

  1. 按照 cnicutar 的建议将 confmx 声明为全局变量。
  2. Allocate memory space for your array dynamically.并将指针传递给 initialize_mx()

编辑:刚刚意识到如果你传递一个指针你仍然必须分配内存空间所以你有这两个选择:)

关于c - 小型(ish)二维阵列的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963743/

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