4

マトリックス上で動作するプログラムを 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);

エラーメッセージ:

アドレス 0x7FE7EA0B8 のマップされた領域内にないアクセス [PID: 2484]

セマンティックに何か問題があると思いますか....? システム クロックが取得した値を srand に渡したいのですが、うまくいきませんでした。

4

1 に答える 1

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 

スタックにデータが多すぎると思われます。スタックスペースには限りがあります。正確なサイズはプラットフォームとコンパイラに依存します。数百KBの範囲にいる場合は、災害に悩まされています。このような大きな配列は、静的データとして、またはヒープ上に配置する方が適切です。これらのそれぞれに修飾子を追加するstaticか、を割り当ててみてくださいmalloc()

于 2013-03-20T15:09:58.803 に答える