srand()触发器不在映射区域内

时间:2013-03-20 15:06:38

标签: c srand

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

#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);

错误消息:

  

不在地址0x7FE7EA0B8的映射区域内访问[PID:    2484]

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

1 个答案:

答案 0 :(得分:7)

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()分配它们。