链表复制版本溢出
overflow in copied version of linked list
我有一个链表类。它包括一个复制构造函数:
LinkedListStorage(const LinkedListStorage &other) :root(NULL)
{
size = other.size;
count = other.count;
node *cur = other.root;
node *end = NULL;
while(cur->next != NULL)
{
node* x = new node;
x->word = cur->word;
if(!root)
{
root = x;
end = root;
}
else
{
end->next = x;
end = x;
}
cur = cur->next;
}
}
班里我运行它通过一个方法写链表文件,然而同时表示方法适用于原始列表,列表的复制版本导致访问冲突,逐页浏览列表最后一个进入的是复制指向0 x00000000正如预期的那样,然而当它到达为最后一个节点最终编写函数的指针指向0 xcdcdcdcd,没有试图复制之间的代码运行,并且使用write函数,所以它一定是复制构造函数,但是我不能为我的生命弄清楚哪里出错了。
提前感谢您的帮助!
在没有看到类的其余部分的情况下很难说,但也许您需要初始化x->next
,即
node* x = new node;
x->word = cur->word;
x->next = NULL;
我认为问题是你没有复制最后一个元素。变化:
while(cur->next != NULL)
while(cur != NULL)
您在end
中存储指向列表中最后一个条目的指针,但是当迭代列表时,您检查->next != NULL
,您似乎没有在end
上设置。我不确定这就是导致你目前问题的原因,但它似乎是错误的。:)
编辑:由于您还将列表的长度存储在count
中,因此您有三个冗余信息:
-
end
-
->next == NULL
-
count
如果你真的需要它们,你必须小心保持它们同步。
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- C++中无符号字符溢出
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 检测旧GLIBC版本的堆栈溢出
- 链表复制版本溢出