1
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf( “%s”,str );
}
程序运行错误
1)调用GetMemory函数后,str未产生变化,依然是NULL。
编译器为每个参数分配一个副本,函数内为副本分配了内存,真正的指针并没有分配内存。
2)strcpy(str,"hello workd"); 这段代码运行错误。
3)malloc 有时会出错,应该在运行之后,判断返回值是否等于NULL。
4)动态分配的内存没有释放。
正确修改1:
void GetMemory(char **p)
{
*p=(char*)malloc(100);
}
void test()
{
char *str=NULL;
GetMemory(&str);
if(str!=NULL)
{
strcpy(str,"hello world.");
printf("%s\n",str);
free(str);
str=NULL;
}
}
正确修改2:
char *GetMemory()
{
char *p=(char *)malloc(100);
return p;
}
void test(void){
char *str=NULL;
str=GetMemory();
if(str!=NULL)
{
strcpy(str,"hello world");
printf("%s\n",str);
free(str);
str=NULL;
}
}
2
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
运行错误。
数组为函数内的局部自动变量,在函数返回后,内存已经被释放。
3
void swap( int* p1,int* p2 )
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
//在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。
//应该改为
void swap( int* p1,int* p2 )
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
转载:http://blog.csdn.net/xiven/article/details/4345199