Null Pointer Assignment

来源:百度知道 编辑:UC知道 时间:2024/06/07 11:48:30
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
char *getmemory()
{ char *p=NULL;
p=(char *)malloc(10);
printf("p's add is:%p\n",p);
/*return p;如果没有这个return p的话则会出现null pointer assignment,如果没有这个return p也没有上面的printf语句的话不会出现null pointer assignment*/
}
int main(void)
{ char *ptr=NULL,*ptr2=NULL,*getmemory();
ptr=getmemory();/*如果没有上面的return p的话,这里ptr所指向的地址是不是null*/
strcpy(ptr,"HELLO WORLD");
printf("ptr's string is:%s\n\n",ptr);
free(ptr);
getch();
return(0);
}

上述问题请详细回答下,谢谢!
很感谢您的回答!顺便再问下……
1.strcpy里面的Hello world拷贝到哪里去了?是ptr的内存空间中?有个朋友和我说“strcpy的时候又有新的内存空间来存放hello world”这说法对不?要是这样的话,ptr不是指向了新的这空间地址?
2.char *p=NULL;
p=(char *)malloc(10);这里不是让指针p有指向了?为什么还是NULL? p和&p不是隐式和显式的指针?
3.我学C学的一知半解,没理解内部真正的东西,有甚么书比较好的,推荐几本吗?
最后,再次感谢您的回答!

char *getmemory()
这条语句的char*的意思是getmemory()函数的返回值是char*型(字符指针型)
所以结尾要返回一个指针。如果你不想要返回值,可用void来替代,但main()中的ptr=getmemory()就不会有效了,因为它没有返回值
-----------
晕死,说的就是NULL指针的问题!
你不给它返回值,这个函数的默认返回值(或称之为初使化返回值)当然是NULL了。null pointer assignment指的就是它呀!翻译过来叫“空的指针赋值”
------
ptr=getmemory();/*如果没有上面的return p的话,这里ptr所指向的地址当然是null*/ 你初使化它时,就是NULL 呀
---------
char *p=NULL;
p=(char *)malloc(10);
printf("p's add is:%p\n",p);
这里的指针*p也是空呀!你想将NULL按%p格式输出?应改为
printf("p's add is:%p\n"&p);
这样就对了。指针为空不代表指针的地址也为空。
两个概念呀!

你的内存分配少了!应该给12个字节!10个不够用!!

我用VC6.0,直接编译链接出现的错误是说,那个函数没有返回一个char * 类型的值。你用的编译器不会是Turboc2.0吧。

一下是正确的程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
char *getmemory()
{ char *p=NULL;
p=(char *)malloc(12);
printf("p's add is:%p\n",p);