【发布时间】:2014-10-13 21:31:28
【问题描述】:
我正在尝试创建一个链表,但我遇到了关于内存访问的问题。我调试代码,看看它在哪里出错,但无法解决它。使用'Add watch',可以看到next has unable to read memory 错误。
struct Node
{
string Name;
Node* next;
};
struct LinkedList
{
Node* head = NULL;
bool isX = true;
};
LinkedList* initX(string Arr)
{
LinkedList* link = new LinkedList;
for (int i = 0; i < 15; i++)
{
Node* temp = new Node;
temp->Name = Arr[i];
Node* ptr = new Node;
ptr = link->head;
if (link->head != NULL)
{
while (ptr->next)
{
ptr = ptr->next;
}
ptr->next = temp;
temp->next = NULL;
}
else
link->head = temp;
}
return link;
}
Unhandled exception at 0x008E8AF7 in ...exe: 0xC0000005: Access violation reading location 0xCDCDCDE9.
我该如何解决?
【问题讨论】:
-
请注意
Node* ptr = new Node; ptr = link->head会泄漏内存。首先为ptr分配内存,然后通过重新分配它来覆盖它所指向的内容。虽然这不是问题的原因。 -
如果
link->head == NULL在你做link->head = temp之后你仍然没有将link->next设置为NULL。 -
如果您传递给
initX的字符串小于 15 个字符,则此代码将失败。发布main()函数怎么样? -
@0x499602D2 谢谢。 “link->next to NULL”是什么意思,我没用过。
-
@PaulMcKenzie 这个字符串是常量,所以不会失败
标签: c++ pointers memory-management linked-list