我的节点包含一个 int 和一个字符串变量,我尝试使用二叉搜索树。代码如下:
struct node{
int a;
string members[5];
};
int main(){
node * root = NULL;
root = (node*)malloc(sizeof(node));
root->members[0] = "aaaaa";
return 0;
}
当然,我的代码并不完全像那样,我在 main 中缩短了代码,因为我只想展示问题所在。它给了我“访问冲突写入位置”。我尝试使用“新节点();”而不是 malloc 并且那没有发生。这是为什么?
最佳答案
malloc()
只分配内存。它不调用对象的构造函数。您可以使用例如
void* mem = malloc(sizeof(node));
if (mem) {
node* root = new(mem) node;
// ...
}
当使用 new node
而不是 malloc(sizeof(node)
时,分配的内存也会被初始化。使用未初始化的对象是未定义的行为。
关于c++ - 在二叉搜索树中初始化字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26813096/