得るこのプログラムの目的は、2次元配列の各配列変数、関数内の2次元配列を初期化し、ポインタを呼び出します。セグメンテーション違反
チャーmass_data_shiftを設定することが今である[9]〜[9]。は 'T'に等しい。全体で100 Tsに等しくなければならない。
これは、この2D配列アドレスを引数としてvoid関数を呼び出すことによって行われます。これをポインタで呼び出すと、ループで初期化されます。ループ内
は、2DアレイがT.
* mass_data [mass_data_counter] [mass_data_counter_two] = 'T' に設定されるべきであるしています。
しかし.....におけるプログラムの結果:* mass_dataを初期化しようとした後
- (最も頻繁)セグメンテーションフォールト[4] [2]
- (時々)Aプログラムが正常に実行された後のセグメンテーションフォルト(?)が実行されます。
- (時には)プログラムが正常に実行されます。
このプログラムは、どこかで境界から書き出しています。セグメンテーションフォールトなしでプログラムを実行させたり、他の間違いを修正したりするのに役立つでしょう。
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
void mass_data_define(char (*mass_data)[9][9]){
int mass_data_counter;
int mass_data_counter_two = 0;
for (mass_data_counter=0;mass_data_counter<9;mass_data_counter++){
do {
std::cout << "|Array #1 " << mass_data_counter
<< " ::: |Array #2 " << mass_data_counter_two
<< std::endl;
*mass_data[mass_data_counter][mass_data_counter_two] = 'T';
std::cout << *mass_data[mass_data_counter][mass_data_counter_two];
mass_data_counter_two++;
std::cout << "---------End of Counter 2 Init Code----------" << std::endl;
} while (mass_data_counter_two < 9);
mass_data_counter_two = 0;
}
}
int main()
{
char mass_data_shift[9][9];
mass_data_define(&mass_data_shift);
std::cout << "-END-" << std::endl;
return 0;
}
最終編集:主な原因は下記のszymによって解決されました。空白とiostreamが見つからなかったのを残念に思っていましたが、投稿時に書式設定の問題でした。また、以下のように配列の長さに合わせてループを変更しました。
最大81のスペースしか使用できません。 Nの配列は0..N-1で索引付けされます。あなたの9x9配列が100個の要素を保持していると言えば、配列はN + 1の大きさになると思います。 012を保持しているだけです。 –
0から9までループしているように見えます。あなたの配列は0から8しかサポートしていません。 –
申し訳ありませんが、0〜9ではなく0〜8になるようにループを変更した後も、私はまだセグメント化エラーが発生します。アイデア? –