读书人

指针,该如何处理

发布时间: 2013-11-08 17:52:14 作者: rapoo

指针
关于指针

#include<stdio.h>
#include<stdlib.h>



struct student 指针,该如何处理
{
char *name;
int score;

}stu,*pstu;

int main()
{

strcpy(stu.name, "Jimy");
stu.score=99;
system("pause");
return 0;
}

我在运行上述程序时,老是出错,不知道是什么原因,麻烦大家帮忙看下。
[解决办法]
name 是指针, 没有分配内存空间
stu.name = (char *)malloc(20);
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

[解决办法]
错误的大意是说 引用了0x00000000的内存,该内存不能写。因此你strcpy时会错

原因是stu是个全局变量,因此编译器会对他初始化,name会初始化为NULL。因此出现了上面的情况

如果是局部变量,那就不一定是NULL了。如果引用的内存恰好是可写的,那就严重了!!
所以,指针变量一定要记得初始化!!!

解决这个问题的话,给name分配一块有效的内存
[解决办法]


stu test;
test.name = (char *)malloc(20);
strcpy(test.name, "Jimy");
test.score=99;

[解决办法]
 strcpy(stu.name, "Jimy");

stu.name可是一个野指针哦,出现这样错误应该是非法内存访问。野指针可能执行了不可以访问的内存区域,造成往该部分区域里写数据出现错误。
在写之前,建议在堆上申请空间。(malloc/realloc/calloc)
[解决办法]
指针使用前要初始化

google 指针初始化
[解决办法]
stu.name需要分配空间,空间的大小必须要>=sizeof("jimy")
[解决办法]
ls的建议都好,但也别忘了malloc之后,记得free一下

读书人网 >C语言

热点推荐