Getmemory的几个经典的关于内存的问题

Getmemory的几个经典的关于内存的问题


// TEST1
void GetMemory1(char *p)
{
    p = (char *)malloc(100);
}

void Test1(void) 
{
    char *str = NULL;
    GetMemory1(str); 
    strcpy(str, "hello world");
    printf(str);
}
//GetMemory并不能传递动态内存, Test 函数中的 str 一直都是 NULL。
// strcpy(str, "hello world");将使程序崩溃。 

// TEST2
char *GetMemory2(void)
{ 
    char p[] = "hello world";
    return p;
}
void Test2(void)
{
    char *str = NULL;
    str = GetMemory2(); 
    printf(str);
}

//可能是乱码。
//因为 GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原先的内容已经被清除,新内容不可知。

// TEST3
char *GetMemory3(void)
{ 
     return "hello world";
}
void Test3(void)
{
    char *str = NULL;
    str = GetMemory3(); 
    printf(str);
}
//Test3 中打印hello world,因为返回常量区,而且并没有被修改过。

// TEST4
void GetMemory4(char **p, int num)
{
    *p = (char *)malloc(num);
}
void Test4(void)
{
    char *str = NULL;
    GetMemory3(&str, 100);
    strcpy(str, "hello"); 
    printf(str); 
}
//内存没释放

// TEST5
void Test5(void)
{
    char *str = (char *) malloc(100);
    strcpy(str, "hello");
    free(str); 
    if(str != NULL)
    {
       strcpy(str, "world"); 
       printf(str);
    }
}
//str为野指针,打印的结果不得而知

// TEST6
void Test6()
{
    char *str=(char *)malloc(100);
    strcpy(str, "hello");
    str+=6;
    free(str);
    if(str!=NULL)
    {
        strcpy(str, "world");
        printf(str);
    }
}
//VC断言失败,运行错误
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值