出于某种原因,传递的结构的值在我没有访问它们的情况下发生了变化。我通过使用 Visual Studio 进行调试发现了这一点。这是代码:
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 ▭
}
这是我获取要传递给“blitSurface”的“rect”变量的地方。
最佳答案
两个词:未定义的行为。
SDL_Rect* offset;
offset->x = x;
offset->y = y;
您正在访问一个未初始化的变量。
要么分配offset
:
SDL_Rect* offset = new SDL_Rect;
或者自动内存:
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface( src, rect, screen, &offset );
关于C++ - 值意外更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650360/