【新手指针问题】请问以下代码为什么会有运行错误?

[复制链接]
查看11 | 回复10 | 2021-1-27 06:52:08 | 显示全部楼层 |阅读模式
#include
#include
structNode;
typedefstructNode*PtrToNode;
typedefPtrToNodeList;
typedefPtrToNodePosition;
structNode
{
intElement;
PositionNext;
};
intmain()
{
ListL;
L->Element=0;
L->Next=NULL;
printf("Helloworld!\n");
return0;
}
而且这个警告是什么意思?
warningLisuseduninitializedinthisfunction
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
将17行改为
ListL=(List)malloc(sizeof(List));
竟然可以了,但是还是不懂哎。。。
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
ListL;只是定义了一个指针没有为变量分配内存,在运行过程中会出现内存访问错误。
应该定义成ListL=newNode;在定义指针的同时分配内存,并且需要在结束的时候使用delete释放。
或者先定义一个structNodelStart;然后使用ListL=&lStart;
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
好好温习一下什么是指针
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
引用3楼vingo888的回复:好好温习一下什么是指针说得对!
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
引用2楼robertbo的回复:ListL;只是定义了一个指针没有为变量分配内存,在运行过程中会出现内存访问错误。
应该定义成ListL=newNode;在定义指针的同时分配内存,并且需要在结束的时候使用delete释放。
或者先定义一个structNodelStart;然后使用ListL=&lStart;
谢谢
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
也在学习指针,过来看看,好困难的感觉。
这还有结构体。。。
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
应该是:如果不是动态的指针的,你只是声明但没定义,就相当于空指针了,它没给它分配内存空间,所以你L->Element=0;
L->Next=NULL;就无法给它存数据了(没地儿存入),
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
就像名字要有实体是一个道理,没有指向的指针一但
L->Element=0;
L->Next=NULL;
就会造成崩溃。
回复

使用道具 举报

千问 | 2021-1-27 06:52:08 | 显示全部楼层
当你Listl时,只是为这个List指针分配了指针的内存,4个字节。
然而你要为指针指向的实体分配内存,这个指针指向的才是一个“真正存在“的实体。
如果没有给这个实体分配内存,就相当于你现在有一个箭头,你没有告诉他指向哪个物体,你就想得到他指向的物体的某个部件。那么这个箭头就会出错,因为他自己也不知道自己指向了什么。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行