我在为字符类成员分配值时遇到问题:
class Node
{
public:
char c;
};
void main(void)
{
Node *node;
node->c = 'a';
}
答案 0 :(得分:2)
在为其分配值之前,您没有构建Node
对象。您的node
指针未初始化。
void main(void)
{
Node *node = new Node; // <-- add 'new'
node->c = 'a';
delete node; // <-- add this, too
}
或者,在堆栈上的自动存储中创建Node
对象,而不是堆中的动态存储。让编译器为您管理内存。
void main(void)
{
Node node; // <-- no pointer
node.c = 'a';
}
答案 1 :(得分:1)
由于您可能正在学习C ++,因此我建议您不要以C方式手动控制对象生存期并使用C ++内存管理功能。在您的简单示例中,您在为其成员分配值之前不构造Node
对象。你的指针指向无处。如果使用C ++特性,编译器将负责所需的内存分配和释放。
#include <memory>
void main(void)
{
auto node = std::make_unique<Node>(); // allocate Node object in the dynamic memory
node->c = 'a';
} // Node object automatically destroyed and frees dynamic memory
您还可以指示编译器在函数本地堆栈上分配Node
对象。
void main(void)
{
Node node; // Node object on stack
node.c = 'a';
} // Node object automatically destroyed, stack memory is freed.