[英]Why am I getting an uninitalized heap memory error when using a pointer (C++)?
我的任务是用C / C ++编写一个更简单的编译器。 main()函数调用下面的函数parse_program(),以便从控制台读取所有输入并将其存储在链接列表图中。
由于某种原因,我的程序在这里中断:
while (node != NULL){
if (node->id == ID) //Breaks here
...;
node = node->next;
}
内存访问冲突为0xCDCDCDCD。 对此的研究表明,我尚未初始化堆内存。 做一些试验,我意识到在创建节点之后,立即在位置0xCDCDCDCD处创建了node-> next。
struct Node* parse_program(){
struct Node* node = new Node;
cout << node;
cout << node->next;
...;
return node;
}
产出
0044A940
CDCDCDCD
上面的函数是程序中首先要调用的函数。 我确实有全局变量。
我是否为节点分配了错误的内存? 甚至在调用该数组/指针之前,统一的数组/指针或程序中其他内容是否会引起错误?
感谢您的任何建议。 我很困惑从哪里开始寻找问题。
以下是我知道如何修复的选项:
node->next = NULL;
在node = new Node;
之后手动进行node = new Node;
; Node
没有任何用户提供的构造函数(例如struct Node { Node *next; };
new Node()
,则可以将new Node()
与括号一起使用。在此处查看有关值初始化的更多详细信息: http://en.cppreference。 com / w / cpp / language / value_initialization next
自动初始化。 这是添加构造函数的方法:
struct Node {
Node() : next(NULL) {}
Node *next;
...
};
new Node
将调用您的默认构造函数Node()
,它将为您将next
数据成员设置为NULL
。
如果省略构造函数,则C ++将对new Node
使用隐式的Node() {}
,这会使next
未初始化(并且其值未定义),因此在打印时会出现随机垃圾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.