在不同地方声明结构体指针,在for循环内分配内存后,其中一个会出现段错误。

新手上路,请多包涵
#include<iostream>
using namespace std;

class node{
    public:
    node *next;
    int data;
}*root; //声明点1 
int main(){

    node *root; //声明点2 
    for(int i = 0; i < 10; i++) {
        if(root == NULL) {
            root = new node;
            root->data = 3;
        }
}
    if(root !=NULL) {
        cout <<root->data;//在声明点1 程序不会报错 在声明点2 程序报错 
    }
}

还有一个问题就是 我假如 在 声明点2 给root分配内存后,在for循环里一直对root的next节点分配内存,最终并不会报错。代码如下

#include<iostream>
using namespace std;

class node{
    public:
    node *next;
    int data;
}; 
int main(){

    node *root = new node(); //声明点2 
    node *cur = root;
    for(int i = 0; i < 10; i++) {
        cur->data = i;
        cur->next = new node;
        cur = cur->next;
}
        cout <<root->next->next->next->data;//可以正常调用
}

不清楚具体原因,烦请各位大神能指点下小弟!

阅读 2.6k
2 个回答

申明点1是全局变量,默认为nullptr。
申明2是局部变量,没有默认值。改成node *root = nullptr;试试

新手上路,请多包涵

楼上正街,main函数里面访问的root是main()函数的局部变量,初始值是多少不清楚,你可以打印出来看一下,应该不为0.
在for循环里边root的值一直不为NULL,最后的root->data属于非法内存访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题