声明变量时发生访问冲突
Access violation when I declare a variable
我遇到了一些调试问题。我在程序中完全不相关的部分出现了两个访问违规错误,我都不太理解。其中一个发生在我声明一个新变量时,在本例中是
std::map<float, float> fMap;
我已经检查过这个名字在代码中的其他地方没有使用,我不确定这有什么关系,但这是我所能想到的。我想只有当我用指针做了一些愚蠢的事情时,我才成功地制作出其中一个。有人知道是什么原因造成的吗?该项目正在与Borland6。
谢谢,
错误与手头的声明无关:很可能是您之前犯的错误造成的延迟结果。在命中映射声明之前运行的一些代码以某种方式损坏了堆。可能导致"延迟"崩溃的因素是
- 正在释放尚未分配给您的内存
- 多次释放内存
- 写入已分配给您的内存区域之外
这些错误可能会立即触发崩溃,但通常不会:相反,某个敏感堆结构的损坏部分会等待分配以触发崩溃。当std::map
为其内部分配内存时,它会通过从损坏的堆中请求内存来触发崩溃。
最好的方法是使用内存分析工具。它应该在错误发生时向你精确定位,让你解决问题,而不是追求其后果。
不要将浮点用作std::映射的键,比较运算符不能很好地处理浮点。你能给我更多关于其他错误的细节吗?
这肯定是早期错误的结果—你做了什么这是未定义的行为,可能与无效指针或引用,或滥用指针。频率最高的原因是写入超出分配块的末尾或写入通过悬挂指针(内存已删除)。这通常是非常隐蔽,例如:
std::vector<int> v;
v.push_back(1);
int& r = v[0];
v.push_back(2);
r = 0;
在某些情况下,可以从容器中添加或删除元素情况(取决于容器的类型)使所有引用或指向容器中元素的指针。
在C时代,最常见的原因之一是分配strlen
字节,然后将strcpy
插入其中。如果您使用的是现代C++,你从来没有分配过任何东西的数组,最常见的原因是可能是插入到容器中使指针无效引用或仍在使用的迭代器。使用调试该库的版本将发现迭代器的问题;工具像valgrind一样,通常会用指针和参考文献。你应该同时使用这两种方法(以及良好的测试套房—两者都不会发现测试中没有出现的错误例)。
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 尝试使用成员函数访问动态分配的成员变量时读取访问冲突
- 写入结构变量时发生strcpy访问冲突
- C++-引发异常:读取访问冲突.变量为nullptr
- 当函数在fread()应用于局部结构变量后返回时发生访问冲突
- 声明变量时发生访问冲突
- 传递变量时的访问冲突
- 可以净化找出栈变量上的访问冲突
- 赋值变量时c++未处理异常访问冲突
- 使用 int 变量的 C++ 异常访问冲突
- 未处理的异常/访问冲突,只要我在变量上使用 OutputDebugStringW()
- 尝试返回同一类中的私有变量时C++ "Getter"方法抛出访问冲突