现在的位置: 首页 > 综合 > 正文

结构体指针未初始化引起的–Unhandled exception in XXX.exe:0xC0000005:Access Violation

2018年05月19日 ⁄ 综合 ⁄ 共 464字 ⁄ 字号 评论关闭

这个问题很常见,也是大多数童鞋的疑问;但是网上很多解释不尽人意。建议拷贝代码调试观察各个值的变化

#include <stdio.h>

struct LNode
{

int data;

LNode *next;

};

int main()

{

LNode p;
LNode * q;
p.data = 5;
p.next = NULL;
q->data = 55;//-- Unhandled exception in XXX.exe:0xC0000005:Access Violation 

q->next = NULL;

return 0;

}

    首先,结构体变量之所以没错,是因为声明"p"时编译器就给"p"分配了一个容纳"LNode"结构体的内存空间;而'q'只要是指针,就意味着声明时它只是一个32位的数字,仅此而已!之所以把它声明为LNode类型,或int型,char型,只是为了明确以后移动结点时的长度。

    现在q是一个"野指针",它指向的data“,"next"根本不知道是哪儿,所以需要初始化的工作,开辟一块LNode大小的结构体让q指向,然后赋值。

文笔不好,童鞋们慢慢理解了。。。

抱歉!评论已关闭.