0xC0000005:访问冲突读取位置0x00000004
0xC0000005: Access violation reading location 0x00000004
我的问题是我面临的错误"未处理的异常在0x00bd3364在qualnet.exe: 0xC0000005:访问违规读取位置0x00000004.".
这个场景是我定义了一个结构体(nodeinfotable),它在另一个结构体(Node)中使用。请注意,我在网络模拟器QualNet中使用此代码。每当我在网络模拟器中执行代码时,我都会出错。然而,如果我在一个单独的项目(测试项目)中执行我的代码,那么这个代码就会正确执行。
我认为内存分配有一些问题。但我想知道为什么它在一个项目中正确运行,而在另一个项目中却没有。
我也搜索了其他类似标题的帖子,但他们的问题不同。这就是为什么,我使用了新的帖子来查询。
我的代码如下:文件:node.h
struct NodesInfoTable {
int nodeId;
int nodeStatus;
list<int> channels;
};
struct Cluster {
int clusterId;
list<int> commonChannels;
Cluster() {
clusterId= -1;
}
};
struct Node {
int var1;
int var2;
Cluster* cluster;
list<NodesInfoTable*> nodeTable;
};
文件:node.cpp
Node* newNode;
newNode = (Node*) MEM_malloc(sizeof(Node));
.....
newNode->cluster = new Cluster();
newNode->nbTable = ??
....
文件:myfile.cpp
NodesInfoTable nbTable1;
nbTable1.nodeId = 1;
nbTable1.nodeStatus = 2;
node->nbTable.push_back(nbTable1); //'node' object is available here
我得到错误:
行在qualnet.exe中0x00bd3364的未处理异常:0xC0000005:访问违反读取位置0x00000004.
:
节点-> nbTable.push_back (nbTable1);
调试器将我导航到文件列表中的代码_Nodeptr _Newnode = _Buynode(_Pnode, _Prevnode(_Pnode), _Val);
。下面还提到了这段代码上面和下面的一些更多语句:
_Nodeptr _Pnode = _Where._Mynode();
_Nodeptr _Newnode = _Buynode(_Pnode, _Prevnode(_Pnode), _Val);
_Incsize(1);
_Prevnode(_Pnode) = _Newnode;
_Nextnode(_Prevnode(_Newnode)) = _Newnode;
请不要告诉我通过'node'对象正确访问'cluster'对象。然而,问题是'nbTable'。由于我使用了语句newNode->cluster = new Cluster()
,我认为这就是为什么内存被分配给这个对象。但我不知道我应该如何处理newNode->nbTable = ??
,因为我认为这是问题所在。
提前谢谢你,我期待着解决方案。
我还没有验证它,但是注释基本上说明了它。
结构如下:
struct Node {
int var1;
int var2;
Cluster* cluster;
list<NodesInfoTable*> nodeTable;
};
您分配的:
Node* newNode;
newNode = (Node*) MEM_malloc(sizeof(Node));
我不知道MEM_malloc
到底做了什么,但是剧组辱骂了一些东西,可能是void*
被分为Node*
。如果你看一下Node
结构,你有一个list<NodesInfoTable*>
,它可能是std::list
,它是一个类。
我们都知道,类需要在正确使用它们之前运行它们的构造函数。分配原始内存并强制转换它不会神奇地执行构造函数。
如果你在某处看到一个类,使用new!
作为一个基本规则,你应该在c++中使用new
和delete
。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 0xC0000005:访问违规写入位置0x00000004。
- 读取位置0x00000004时发生访问冲突
- 通过WinAPI套接字连接到蓝牙设备时崩溃(读取位置0x00000004时发生访问冲突)
- 0xC0000005:访问冲突读取位置0x00000004
- 当从c++代码发送回调到c#代码时,访问冲突读取位置0x00000004