以下是根据 林锐博士 《高质量c/c++编程指南》中的7.4中一个程序编写的测试程序,
希望路过的大侠帮忙解释下函数操作失败的原因,万分感谢!
/*
函数测试指针作为参数对内存的传递
*/
#include<stdio.h>
#include<stdlib.h> //sizeof()
#include<string.h> //strcpy()
//该函数设计 为指针p所指首地址分配num大小的内存块
int GetMemory(char *p,int num);
void main(void)
{
char *str=NULL;
int flag=0;
flag=GetMemory(str,100);
if(flag)
{
printf("flag=%d/n",flag); //vc环境下显示flag=1
strcpy(str,"hello"); //程序在此中断
printf("%s/n",str);
}
else
printf("flag=%d/n",flag);
}
int GetMemory(char *p,int num)
{
p=(char *)malloc(sizeof(char)*num);
if(p!=NULL)
return 1;
else
return 0;
}
林锐博士在说明这个函数时指出该函数调用完成后,str依然为NULL。但是我在vc环境下操作时,flag=1,且str不为零
tc下显示
flag=1
<null>
Null pointer assignment
tc调试中p确实显示NULL。
请帮忙解释下其中的工作原理,谢谢。