的问题 问什么出现空指针的问题,求大神
1个回答
展开全部
关于 C 语言的所有使用中,最难于理解的、但是同时又是最具有最大灵活性、以及最大魅力的恐怕就属于 C 语言中的指针内容了!!
之所以会出现空指针的问题,是因为你虽然定义了一个指针变量,但是你并没有将该指针变量指向一个实实在在的内存地址,那么此时此刻你一旦使用了该指针变量,就必然会造成程序崩溃!!!
举例说明如下(一个完整的 C 语言源程序):
#include <stdlib.h> /* malloc( ) 函数、free( ) 函数原型都在此头文件中有说明 */
void main( )
{
char * p ; /* 定义一个字符指针变量 p */
/* gets(p) ; 特别注意:这里的 gets(p)、以及 puts(p) 就是绝对错误的!!因为虽然说在前面已经定义了字符指针变量 p,但是由于并没有对字符指针变量 p 进行初始化,就使用该指针变量,故一旦运行该程序,该程序肯定就会立马崩溃的!!!! 正确的代码见从 malloc 开始的部分。
puts(p) ; */
p = (char *)malloc(1000)*sizeof(char) ; /* 为 p 动态分配内存,其大小为 1000 个字节 */
if( p == NULL ) /* 如果内存分配失败,则打印出错信息,并退出应用程序 */
{
printf("Can't allocation memory !\n") ;
exit(1) ; /* 退出应用程序 */
}
gets(p) ; /* 若动态分配内存成功,则从键盘上输入一串字符,最多为 1000 个 */
puts(p) ; /* 在屏幕上显示刚刚从键盘上输入的字符串 */
free(p) ; /* 释放内存 */
}
之所以会出现空指针的问题,是因为你虽然定义了一个指针变量,但是你并没有将该指针变量指向一个实实在在的内存地址,那么此时此刻你一旦使用了该指针变量,就必然会造成程序崩溃!!!
举例说明如下(一个完整的 C 语言源程序):
#include <stdlib.h> /* malloc( ) 函数、free( ) 函数原型都在此头文件中有说明 */
void main( )
{
char * p ; /* 定义一个字符指针变量 p */
/* gets(p) ; 特别注意:这里的 gets(p)、以及 puts(p) 就是绝对错误的!!因为虽然说在前面已经定义了字符指针变量 p,但是由于并没有对字符指针变量 p 进行初始化,就使用该指针变量,故一旦运行该程序,该程序肯定就会立马崩溃的!!!! 正确的代码见从 malloc 开始的部分。
puts(p) ; */
p = (char *)malloc(1000)*sizeof(char) ; /* 为 p 动态分配内存,其大小为 1000 个字节 */
if( p == NULL ) /* 如果内存分配失败,则打印出错信息,并退出应用程序 */
{
printf("Can't allocation memory !\n") ;
exit(1) ; /* 退出应用程序 */
}
gets(p) ; /* 若动态分配内存成功,则从键盘上输入一串字符,最多为 1000 个 */
puts(p) ; /* 在屏幕上显示刚刚从键盘上输入的字符串 */
free(p) ; /* 释放内存 */
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询