Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明变量时发生访问冲突_C++_C++builder - Fatal编程技术网

C++ 声明变量时发生访问冲突

C++ 声明变量时发生访问冲突,c++,c++builder,C++,C++builder,我在调试时遇到了一些麻烦。在我的程序中,有两个完全不相关的部分出现了访问冲突错误,这两个错误我都不理解。其中之一发生在我声明一个新变量时,在本例中 std::map<float, float> fMap; std::map-fMap; 我已经检查过这个名字在代码的其他地方没有被使用,我不确定这会有什么关系,但这是我所能想到的。我想只有当我用指针做了一些愚蠢的事情时,我才能够制作出其中的一个。有人知道是什么导致了这一切吗?该项目正在与Borland 6一起编制 谢谢,该错误与手头的

我在调试时遇到了一些麻烦。在我的程序中,有两个完全不相关的部分出现了访问冲突错误,这两个错误我都不理解。其中之一发生在我声明一个新变量时,在本例中

std::map<float, float> fMap;
std::map-fMap;
我已经检查过这个名字在代码的其他地方没有被使用,我不确定这会有什么关系,但这是我所能想到的。我想只有当我用指针做了一些愚蠢的事情时,我才能够制作出其中的一个。有人知道是什么导致了这一切吗?该项目正在与Borland 6一起编制


谢谢,

该错误与手头的声明无关:很可能是您之前犯的错误导致的延迟结果。在命中映射声明之前运行的一些代码以某种方式损坏了堆。可能导致“延迟”崩溃的因素包括

  • 正在释放尚未分配给您的内存
  • 多次释放内存
  • 写入已分配给您的内存区域之外
这些错误可能会立即触发崩溃,但通常不会:相反,某些敏感堆结构的损坏部分等待分配以触发崩溃。当
std::map
为其内部分配内存时,它会通过从损坏的堆请求内存来触发崩溃


找到答案的最佳方法是使用内存分析工具。它应该在错误发生时向您指出错误,让您解决问题,而不是追查其后果。

不要将浮点用作std::maps的键,比较运算符对浮点不起作用。您能给我一些其他错误的详细信息吗?

这肯定是您之前所做错误的结果 这是未定义的行为,可能与无效 指针或引用,或错误使用指针。最频繁的 原因是写入超出分配块的末尾或写入 通过悬空指针(内存已删除)。这种情况经常会发生 非常隐蔽,例如:

std::vector<int> v;
v.push_back(1);
int& r = v[0];
v.push_back(2);
r = 0;
std::vector v;
v、 推回(1);
int&r=v[0];
v、 推回(2);
r=0;
在某些情况下,可以从容器中添加或删除元素 环境(取决于容器的类型)使所有 指向容器中元素的引用或指针

在C时代,最常见的原因之一是分配
strlen
字节,然后
strcpy
插入它们。如果你使用的是现代C++, 您从未分配过任何数组,这是最常见的原因 插入到容器中可能会使指针无效 引用或仍在使用的迭代器。使用调试 库的版本将捕获迭代器的问题;工具 像valgrind一样,他通常会用指针和 参考资料。您应该同时使用这两者(以及良好的测试) 套件都不会捕获测试中未发生的错误
案例)。

编译代码或运行代码时,您遇到访问冲突?声明与访问冲突无关。写一个小程序,在那里你可以复制这种行为,并在问题中发布。你能提供一个完整但最小的程序来复制你得到的错误吗?类似于,
#include
指令加上
intmain(){std::map fMap;返回0;}
?(顺便说一句,它在我的机器上工作)仅仅是
fMap
的声明就导致了问题?声明的范围是什么?特别是函数、类成员或全局?我在运行代码时会遇到访问冲突。我花了三个小时想知道这到底是怎么发生的,我真的不知道STL在引擎盖下是怎么工作的。然而,如果我把它注释掉,错误就会消失,尽管它会削弱程序,因为地图会继续做一些相当重要的工作。我将看看是否可以在一个简单的例子中重现它。如果我注释掉映射(以及其他一些东西),那么该方法将毫无问题地执行,包括创建一些其他stl对象。这就是说,这可能解释了另一个看似非感官的访问违规。@Bowler您是否看到崩溃取决于分配的大小和分配的项目数。这就是为什么崩溃的时间有点随意,特别是在并发环境中。使用内存分析器应该可以清除所有内容。因为我不明白我有一个新的物体似乎是造成问题的原因。首先,将其作为指针可能是错误的选择。“不要将浮点用作键…”可能是过度概括。请参阅其他许多相关问题。但这无疑是一个值得质疑的问题。使用浮动作为关键点很少是正确的做法。当您确实需要浮点数作为键时,通常还需要自定义比较函数和/或调用代码中的其他特殊功能。问原始“访问违规”问题的OP很可能没有处理这些特殊情况。从什么时候开始?