您的位置:首页 > 其它

动态内存传递

2013-04-12 12:17 211 查看
问题描述:动态内存传递错误

 

代码描述:

#include <stdio.h>
#include <malloc.h>
#include <string.h>
//malloc
void getMemory(
char * p )
{
    p= (char*)(malloc(100));
}
 
int main(void)
{
    char*p =
NULL;
    getMemory(p);
    strcpy(p,"Hellow");
    printf("%s",p);
    free(p);
    return0;
}

 

编译通过,运行时崩溃,调试时发现p值为空,难道是申请内存失败?goole后恍然大悟!

 

指针作为函数参数时,是按值传递方式,编译器会产生p 的一个副本假设为_p,并使_p=p;这样其实函数内使用的其实并不是p本身,因此p = (char*)(malloc(100));其实是:_p
= (char*)(malloc(100));跟p没有关系。所以p的值在调用函数前后根本就没有改变,其值还是初始化时的NULL,所以就导致内存的非法操作。
 
解决方法有很多,使用引用传递方式解决为:
 
#include <stdio.h>
#include <malloc.h>
#include <string.h>
 
//malloc
void getMemory(
char *& p )
{
    p= (char*)(malloc(100));
}
int main(void)
{
    char*p =
NULL;
    getMemory(p);
    strcpy(p,"Hellow");
    printf("%s",p);
    free(p);
    return0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存 malloc strcpy