このプログラムを作成して、ビーセットとして駐車場を表現しました。駐車場の各スペースは1ビットです。私はスペースが占有されているかどうかをチェックするcheckSpace関数を持っています。何らかの理由で私の駐車場のビットセットへのポインタが変更されたり、関数に渡された後にデータが変更されたりします。それをテストするために、私は駐車場を設置し、スペースをチェックした後、直ちにそれをチェックし、何らかの理由で戻り値が変わってはならないときに変更しています。どんな助けもありがとう!関数呼び出し後にポインタが変化しています。C
struct carPark{
int spaces, levels;
unsigned char * park;
};
struct carPark * emptyCarPark(int levels, int spaces){
int chars = (spaces*levels)/8;
if((spaces*levels)%8 != 0){
chars++;
}
unsigned char park[chars];
for (int i = 0; i < chars; ++i){
park[i] = 0;
}
unsigned char * ptr = &park[0];
struct carPark * myPark = malloc(sizeof(struct carPark));
myPark->park = ptr;
myPark->spaces = spaces;
myPark->levels = levels;
return myPark;
}
int checkSpace(int level, int spaceNum, struct carPark * carpark){
int charPosition = ((level*carpark->spaces) + spaceNum)/8;
int bitPosition = ((level*carpark->spaces) + spaceNum)%8;
if(carpark->park[charPosition]&&(1<<bitPosition) != 0){
return 1;
}
return 0;
}
int main(int argc, char const *argv[]){
struct carPark * myPark = emptyCarPark(5,20);
printf("1st check: %d\n",checkSpace(1,1,myPark));
printf("Second check: %d\n",checkSpace(1,1,myPark));
return 0;
}
だから私は私が手にプログラムを実行すると、以下のコードで
1st check: 0
Second check: 1
期待値は何ですか? 0 2回目のチェック:0 – HoKy22
これは、それがすべきことです。もう1つの答えは、それをクリアしました。私はそれが正しいと思われる単なる値であると推測しています。 – JohnM