c++中的指针错误
Pointer Errors in C++
我有一个std::vector类型,用于保存指向应用程序中对象的指针。它的声明如下所示:
std::vector< PIXEL* > stgPixels;
…其中PIXEL是在我的应用程序中定义的结构体(由2个浮点变量组成)。
编辑:添加一个像素到矢量:
// allocate a new pixel
PIXEL *pPixel = new PIXEL( D3DXVECTOR2( x, y ) );
// store pixel
stgPixels.push_back( pPixel );
在运行时,我收到一个关于特定像素指针的内存位置的未处理的异常错误…我做了一些调试。PIXEL对象驻留在与分配时相同的位置…问题似乎是std::vector对象。不知何故,存储在vector中的内存地址更改为无法强制转换为PIXEL类型的任意位置…导致异常…
在我的应用程序中可能会发生什么导致std::vector对象中的值无效?这个矢量一次存储了许多像素,之后不再改变。
如果您确定向量中的实际指针值已经改变(即您已经通过将指针值输出到控制台或文件(前后)来验证这一点),那么某些东西正在破坏您的向量。否则你可能已经释放了内存。
如果指针的值发生了变化,常见的情况有:
-
缓冲区溢出(或类似的未定义行为)覆盖了部分或全部矢量数据;
-
缓冲区溢出(或类似的未定义行为)覆盖了vector本身,或者vector是已被销毁的对象的一部分;
-
多线程环境中的争用条件——你可能需要锁来确保对vector的原子访问;
-
程序中的逻辑错误在对vector进行操作时使其混乱;
-
你做了一些讨厌的事情,破坏了堆。
如果指针值没有改变,那么一些常见的情况是:
-
您已经将您的
PIXEL
对象返回到OS某处(可能在析构函数中删除); -
PIXEL
对象是在堆栈上定义的,并且已经被销毁(即存储指向临时对象的指针); -
你做了一些讨厌的事情,破坏了堆。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 运行几次后合并段错误C++(指针算术)
- LinkedList实现C 错误指针间接
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- Xcode 错误:指针和双精度之间的比较
- 未分配正在释放的本机node.js插件错误指针
- 错误指针:解析令牌时无法计算表达式
- C++-va_list错误指针
- 为什么我收到错误" (指针的名称)不是模板)?
- mmap 错误:分段错误/指针无效错误
- C++ Winsock2 错误指针断点触发
- C++ 代码中的错误指针错误
- 数组错误指针上的增量运算符
- MAKEINTRESOURCE 返回资源 ID 的错误指针
- 分段错误C++指针
- 段错误指针
- C++ 错误 :: 指针数组的EXC_BAD_ACCESS
- 通过模糊 mat 从 std::vector: <int>cv::Exception 中获取错误指针
- 正在解决编译器错误:指针可能未初始化