繁体   English   中英

分段故障

[英]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_caststatic_castconst_castreinterpret_cast (请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM