出於某種原因,傳遞的結構體的值在沒有我訪問它們的情況下發生了變化。我通過使用Visual Studio進行調試發現了這一點。這裏是代碼:C++ - 值意外改變
bool Screen::blitSurface(SDL_Surface* src, int x, int y, SDL_Rect* rect) {
SDL_Rect* offset;
offset->x = x;
offset->y = y;
SDL_BlitSurface(src, rect, screen, offset);
return true;
}
正在改變的結構是'rect'。當它通過時,rect-> x是0並且rect-> y是16.但是,在下一個斷點(offset-> x = x;)rect-> x是一個隨機數(例如-13108),與rect-> y相同。有人有一個想法,爲什麼發生這種情況?我完全迷失了,不知道從哪裏開始。
- 編輯 -
好吧,我更新的代碼這一點,但它仍然有問題。
bool Screen::blitSurface(SDL_Surface* src, int x, int y, SDL_Rect* rect) {
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface(src, rect, screen, &offset);
return true;
}
然而,它確實讓我思考。如果我創建一個本地結構,並返回一個指針,它會在函數完成後被刪除?例如,這是否工作?
SDL_Rect* getRect(int x, int y, int width, int height) {
SDL_Rect rect;
rect.x = x;
rect.y = y;
rect.w = width;
rect.h = height;
return ▭
}
這是我得到的'rect'變量,我傳遞給'blitSurface'。
您還沒有分配給'offset'任何記憶;你如何期待這個工作? – ildjarn 2012-03-10 21:36:03
「下一個斷點」在哪裏?函數返回後?在調用'SDL_BlitSurface()'之後? – 2012-03-10 21:37:07
這不是'rect',而是'rect'。這有點像勺子和你之間的區別。 – 2012-03-10 21:38:00