结构体指针初始化

本文探讨了一段用于构建链表的C++代码,在编译成功但运行时出现错误的问题。作者分析了错误原因在于指针未正确初始化,并提出了正确的做法:在使用前为指针分配内存或将它们指向一个已存在的变量。

 

在初学链表时,我写了以下的一段代码来构建一个链表:

#include<iostream>


using namespace std;
int main()
{

int i;
struct node
{
    int a;
    node *next;
};
node *head ,*rear,*p;
head=rear;
for (i=0;i<10;i++)
{
    p=new node;rear->next=p;
    p->a=i;rear=p;
};
rear->next=0;
return 0;
}

这段代码能通过编译,但是运行错误,这是因为定义head和rear时只是给他们做了一个声明,并没有给他们分配空间,所以是不能对他们进行任何操作的.所以必须加上hear=rear=new node.或者让他们指向一个node型变量.

任何指针在定义时都要初始化,或者让他指向一个同类型变量,这是一个好习惯.

ps:经过更进一步的学习后,错误的真正原因是:当定义了一个int型的指针变量p时,系统会在栈里面自动为p分配内存空间,注意是为p分配内存空间!!!而此时p指向的内存地址是0(或者是一个其他的地址值,根据不同的编译器而定).此时若对p进行解引用操作,能通过编译,因为p确实有一个指向的地址,但是这个地址是错误的,或者说是无意义的,所以再运行的时候会出错.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值