1

注:CはMicrosoftCコンパイラです。

次のコードで問題が発生しています。

*Roomsize = (int*)calloc(sizeof(int),sched->numberOfRooms);

roomIndex = 0;
for(roomIndex=0; roomIndex< sched->numberOfRooms; roomIndex++)
{
    fscanf(inputFile,"%d",&lineInput);
    numberOfLinesRead++;
    *Roomsize[roomIndex] = lineInput;
}

これは別のCファイルにあります。保守しやすくするために物事を分離することを決定するまで、この問題は発生していませんでした。ポインタと少し混同しているだけだと思います。

callocは正常に機能します。

ループの最初の反復で、roomIndexの要素0が適切に設定されます。

ただし、ループの2番目の要素(要素1)は、実行時に常にアクセス違反になります。

コードの後半でも2D配列を使用してこの問題が発生しましたが、これはまったく同じ問題であり、これが最も単純なケースであると考えています。

ここで最初の要素以外を設定することが不可能であると思われる理由を誰かが理解するのを手伝ってもらえますか?

4

2 に答える 2

5

*Roomsize[roomIndex]と同じ*(Roomsize[roomIndex])です。あなたは言いたいです(*Roomsize)[roomIndex]

(私はそれRoomsizeが実際にあると思いint**ます。それが正しくない場合、問題は他の場所にある可能性があります。)

于 2011-01-31T18:55:11.827 に答える
0

割り当てるときの最初の行Roomsizeが間違っているように見えます。Roomsizeがであると仮定するのが正しければ、int *@ DanielがRoomsize = (int *) calloc...投稿したように、アスタリスクを取り除くために割り当ても変更する必要があります。

于 2011-01-31T18:58:04.863 に答える