[英]Segmentation fault
试图进行跟踪,但没有找到以下代码导致VC ++中出现“访问冲突”以及gcc中出现分段错误的原因。
#include <vector>
#include <iostream>
using namespace std;
typedef struct node
{
std::string data;
vector <struct node*> child;
}NODE, *PNODE;
int main()
{
PNODE head;
head = (PNODE) malloc(sizeof(NODE));
head->data.assign("hi");
printf("data %s", head->data.c_str());
getchar();
}
为何您认为它应该起作用? 您使用malloc
而不是new
,因此不会调用任何构造函数,并且您所做的所有操作都会访问未初始化的内存。
使用new
而不是malloc
在堆上创建C ++对象。
下列:
head = (PNODE) malloc(sizeof(NODE));
应该读
head = new NODE;
malloc()
在这里不起作用的原因是它没有调用对象构造函数。
我同意以前的答案。
我应该补充说,避免using namespace
是最佳做法(请参见此处 )
在C ++中,避免使用类似C的struct声明:
typedef struct node
{
std::string data;
vector child;
}NODE, *PNODE;
应该:
struct Node
{
std::string data;
std::vector<Node> child;
}
然后:
Node head;
要么:
Node* head = new Node;
如果您使用的是c ++,请使用std::cout
而不是printf
也有c ++ cast操作符: dynamic_cast
, static_cast
, const_cast
, reinterpret_cast
(请参见此处 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.