C srand()触发不在映射区域内的访问

C srand()触发不在映射区域内的访问,c,srand,C,Srand,我正在Linux上开发一个在Matrix上运行的程序。我在一段生成矩阵随机值的代码中遇到问题(它生成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

我正在Linux上开发一个在Matrix上运行的程序。我在一段生成矩阵随机值的代码中遇到问题(它生成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;
   }
错误消息:

访问不在地址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 

我想你有办法。堆栈空间有限。确切的大小取决于平台和编译器;如果你在数百KB的范围内,你就在与灾难调情。像这样的大型数组最好作为静态数据或堆中的数据。试着给每一个添加一个
static
限定符,或者用
malloc()

Thx分配它们,我暂时通过向您提到的四个实体添加static来解决这个问题。OSX和Linux上的堆栈大小通常为8-10 MB。您可以使用内置的ulimit shell将其加倍:
$ulimit-s 20000
或使用
$ulimit-s 30000
将其加倍。
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