编译器在以下代码上抛出运行时段错误:
在主函数中添加如下代码:
#include <iostream>
#include <string>
using namespace std;
struct Node{
int data;
void *next;
string nodeType;
};
Node* initNode(int data){
Node *n = (Node*)malloc(sizeof(Node));
n->data = data;
n->next = NULL;
n->nodeType = "Node"; //if this line is commented it works else segfault
return n;
}
int main() {
Node *n1 = initNode(10);
cout << n1->data << endl;
}
请问为什么在动态分配的结构体中字符串赋值不起作用,而在静态分配的情况下却可以?
以下是有效的方法:
Node initNode(string data){
Node n;
n.data = data; //This works for node creation statically
n.next = NULL;
n.nodeType = "Node"; //and even this works for node creation statically
return n;
}
在主函数中添加如下代码:
int main() {
Node n2 = initNode("Hello");
cout << n2.data << endl;
}
malloc
只是分配内存,它不会 构造 对象实例,这意味着string
构造函数不会被调用。 - Some programmer dudemalloc
,而应该使用new
,如果可能的话也不要使用new
,可以使用make_shared
或std::unique_ptr
(C++11)。注意不改变原意。 - Félix Cantournet