奇妙な問題があり、どのようにアプローチすればよいかわかりません。
50x50文字のテキストファイルを読み取っていて、それを50x51動的配列に書き込みたい(51番目のスロットを「\ 0」で埋める)。
その後、アレイ全体をコンソールに印刷します。これが入力であるため、それぞれ50文字の50行が表示されます。
最初の行を除いて、それも非常にうまく機能します。何らかの理由で常に間違っています。
#define FIELD_SIZE 50
int main(int argc, char** args){
char* data = ReadFile("start.txt");
char** map = (char**) malloc( FIELD_SIZE );
if(map==NULL)
__debugbreak();
{
int i;
for(i = 0; i < FIELD_SIZE; i+=1){
map[i] = (char*) malloc(FIELD_SIZE+1);
if(map[i]==NULL)
__debugbreak();
//(FIELD_SIZE+1) in order to skip the '\n' at the end of each line.
memcpy( &map[i][0], &data[i*(FIELD_SIZE+1)], FIELD_SIZE);
map[i][FIELD_SIZE] = '\0';
}
}
{
int i;
for(i = 0; i < FIELD_SIZE; i+=1){
printf("%s\n", map[i]); //<-- prints something bad for i==0
}
}
free(data);
return 0;
}
プログラム実行後のコンソールは次のようになります 。最初の行も「aaaaaaaaaaaaa...」であると想定されています。だから、それは悪いポインタか何かのようです。
ただし、代わりにFIELD_SIZEを20に減らしている場合(およびそれぞれ20x20のテキストファイルを読み込んでいる場合)は正常に機能します。
ただし、配列サイズと最初のインデックスの関係が機能していないことはわかりません。mallocが0を返すことはないため、割り当てに問題はありません。
プログラムのコンパイルにVS2010C++を使用していますが、Cサブセットに制限する必要があります。