C++ 访问结构的字符串数组时出现分段错误
我现在遇到了一个问题,我必须将单词(字符串)输入到二叉搜索树中,并通过将单词(字符串)放入字符串数组来实现,但是当我尝试将其放入第一个元素时,它是分段错误 以下是我所拥有的: node.hC++ 访问结构的字符串数组时出现分段错误,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
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
(另请参见:placementnew
)
使用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
s需要特殊处理(搜索关键字:placementnew
),因为malloc
只提供存储。它不调用构造函数,并且未构造的字符串
是一个定时炸弹。@AndreasWenzelFixed@user4581301调整为C++问题,代码< >向量< /代码>是不必要的。代码>结构节点*temp=(节点*)malloc(sizeof(节点))不知道如何在节点
的单词
成员中构造99字符串(请参见上面的注释)。您可以通过struct Node*temp=new Node解决这个问题代码>代码>新< /COD>分配存储,然后构造<代码>节点< /C>。当使用C++时,应避免MLALC,因为内存分配的潜在区域不同于通常使用<代码>新< /C>的C++程序使用的内存。混合来自不同机制的动态内存分配会导致潜在问题。