我是靠谱客的博主 冷傲萝莉,这篇文章主要介绍C++读取XXX位置时发生访问冲突的一种情况,现在分享给大家,希望可以做个参考。

今天在写到如下代码时出现了访问冲突(执行children.push_back()时出现错误):

struct TreeTag
{
int val;
vector<Node> children;
};
Node newNode(int val)
{
Node n = (Node)malloc(sizeof(struct TreeTag));
n->val = val;
n->children = vector<Node>();
return n;
}

后来查阅了相关资料,发现是因为在利用malloc申请空间时,由于vector是确定了的(即children变量不是指针),所以在分配空间时,虽然给vector本身分配了空间,但是这个空间仅仅是存vector本身,所以在利用push_back方法向vector里面添加元素时,超过了本身分配给vector的大小,此时就会出现访问冲突的错误。
所以在涉及到动态分配内存时,vector也应使用指针,即将上述代码修改为:

struct TreeTag
{
int val;
vector<Node>* children;
};
Node newNode(int val)
{
Node n = (Node)malloc(sizeof(struct TreeTag));
n->val = val;
n->children = new vector<Node>();
return n;
}

最后

以上就是冷傲萝莉最近收集整理的关于C++读取XXX位置时发生访问冲突的一种情况的全部内容,更多相关C++读取XXX位置时发生访问冲突内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(108)

评论列表共有 0 条评论

立即
投稿
返回
顶部