C++ 访问结构的字符串数组时出现分段错误

C++ 访问结构的字符串数组时出现分段错误,c++,string,C++,String,我现在遇到了一个问题,我必须将单词(字符串)输入到二叉搜索树中,并通过将单词(字符串)放入字符串数组来实现,但是当我尝试将其放入第一个元素时,它是分段错误 以下是我所拥有的: node.h typedef struct Node{ char letter; int asiccValue; struct Node *left, *right; string words[99]; int wordCount; }Node; tree.cpp // This

我现在遇到了一个问题,我必须将单词(字符串)输入到二叉搜索树中,并通过将单词(字符串)放入字符串数组来实现,但是当我尝试将其放入第一个元素时,它是分段错误

以下是我所拥有的:

node.h

typedef struct Node{
    char letter;
    int asiccValue;
    struct Node *left, *right;
    string words[99];
    int wordCount;
}Node;
tree.cpp

// This function creates new nodes as needed
Node *createNode(string word){
    // Assigns values
    struct Node *temp = (Node*)malloc(sizeof(Node));
    temp->letter = word[0];
    temp->asiccValue = (int)word[0];
    temp->left = NULL;
    temp->right = NULL;
    temp->words[0] = word;
    temp->wordCount = 1;
    return temp;
}

malloc
不调用构造函数,这意味着您的
string
数组未初始化。对于任何非平凡类型,除非您知道自己在做什么,否则您确实希望避免使用
malloc
(另请参见:placement
new

使用
new
可以解决您的问题。确保更新现有代码以使用
delete
而不是
free
。另外,考虑删除<代码>新< /代码> /<代码>删除< /代码>,并使用<代码> MaxIO独特< <代码>和朋友> < /P>
Node *createNode(string word){
    // Assigns values
    Node * temp = new Node;
    temp->letter = word[0];
    temp->asiccValue = (int)word[0];
    temp->left = NULL;
    temp->right = NULL;
    temp->words[0] = word;
    temp->wordCount = 1;
    return temp;
}

@ TimKARZE,我已经调整了,但得到同样的错误。如果<代码>字符串实际上是代码> STD::String 。这个问题是C++编程语言的答案将是根本不同的,如果 String 是<代码> TyPulf,这是一个C问题。除非你已经是C++专家,否则你不应该问这个问题。code>mallocing
string
s需要特殊处理(搜索关键字:placement
new
),因为
malloc
只提供存储。它不调用构造函数,并且未构造的
字符串
是一个定时炸弹。@AndreasWenzelFixed@user4581301调整为C++问题,代码< >向量< /代码>是不必要的。代码>结构节点*temp=(节点*)malloc(sizeof(节点))不知道如何在
节点
单词
成员中构造99
字符串(请参见上面的注释)。您可以通过
struct Node*temp=new Node解决这个问题代码>新< /COD>分配存储,然后构造<代码>节点< /C>。当使用C++时,应避免MLALC,因为内存分配的潜在区域不同于通常使用<代码>新< /C>的C++程序使用的内存。混合来自不同机制的动态内存分配会导致潜在问题。