Segmentation fault

Segmentation fault

本文关键字:fault Segmentation      更新时间:2023-10-16

试图跟踪,但没有找到以下代码在vc++中给出"Access violation"的原因,在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的结构声明:

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++强制转换运算符:dynamic_cast, static_cast, const_cast, reinterpret_cast(见这里)

相关文章: