C++ - 值意外更改

标签 c++

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

相关文章:

c++ - 在具有某些约束(内括号)正则表达式的句子中的括号之间查找单词

c++ - 不使用 <algorithm> 从 2 个 vector (或列表)中删除相似元素

c++ - 如何在 C/C++ 中存储可变长度字符串

c++ - glVertexAttribPointer 步幅参数如何工作?

c++ - 显式使用 main 中的构造函数调用作为函数调用参数

c++ - 如何使用 CGAL 存储折叠的边缘

c++ - 如何在不打开 Qt 新窗口的情况下更改 UI?

c++ - 使用线程池 boost asio 多线程 tcp 服务器

java - 使用 Qt 在 Android 上实现 NFC

c++ - C++中可变参数构造函数的用途是什么?