getmemory面试题

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值