出于某种原因,传递的结构体的值在没有我访问它们的情况下发生了变化。我通过使用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