c - srand() 触发访问不在映射区域内

标签 c srand

我正在 Linux 上开发一个在矩阵上运行的程序。我在一段生成矩阵随机值的代码中遇到问题(它会生成段错误) 这是触发我的问题的一段代码。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define INFINITO 10
#define MAX 11
#define MR 100
#define MC 100
#define MEMBER 1
#define NONMEMBER 0

double shortpath(double MatQuad[][MR+MC], int, int ,int precede[]);


int main(){

int d;
int c1, c2, i, j, p , h, l, k, x, mrr, rf, cf;
double X[MR][MC], F1k[MR+1][MC];
double MatQuad[MR+MC][MR+MC];
double P[MC][MC][MC];
int precede[MR+MC];
double best_Delta, Delta;
int best_i, best_j, best_h, best_l;

srand(8);
   for(j=0; j<MR; ++j){
     for(h=0; h<MC; ++h)
       X[j][h]=(rand()% MAX)*0.1;
   }

使用 Valgrind,我获取行

srand(8);

错误信息:

Access not within mapped region at address 0x7FE7EA0B8 [PID: 2484]

你认为语义或......有什么问题吗?我想给 srand 一个系统时钟的值,但我的尝试没有成功。

最佳答案

double X[MR][MC], F1k[MR+1][MC];     // 80KB + 80.8KB
double MatQuad[MR+MC][MR+MC];        // 320KB
double P[MC][MC][MC];                // 8MB
int precede[MR+MC];                  // 800B 

我怀疑你有办法too much data on the stack .堆栈空间有限。确切的大小取决于平台和编译器;如果您处于数百 KB 的范围内,那么您就是在与灾难调情。像这样的大型数组最好作为静态数据或放在堆上。尝试为其中的每一个添加一个 static 限定符,或者使用 malloc() 分配它们。

关于c - srand() 触发访问不在映射区域内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527321/

相关文章:

我可以用我自己的版本替换静态库中的符号吗?

c - -Wmissing-field-initializers 何时触发警告?

c - 如何在 C 中将二进制/十六进制数组转换为字符串数组

c++ - 物理机器之间的 srand 种子一致性

c - 在 32 位系统上使用 libevent 提供大文件 (>2GB)

c++ - 为 UDP 服务器响应重用 sock_fd 与新 sock_fd

c++ - 关于 srand() 和类实现的约定

c++ - 推荐的初始化 srand 的方法?

c - 生成没有 time.h 的随机值

c++ - Rand() % 14 仅生成值 6 或 13