C局部指针问题

C局部指针问题??记录:

指针涉及两个内存:
1、指针本身内存
局部指针存放于栈上,当所处作用域消亡,会被自动销毁。

2、指针指向的内存
指针指向的内存如果是malloc则位于堆上,即使指针所在作用域不存在了,该内存只要不被释放则内存泄漏。

char* test_location_pointer()
{
    char *ch = "dasdasda";
    printf("a    %p\r\n",&ch);    //指针本身的地址
    printf("b    %p\r\n",ch);     //指针指向的地址
    
    return ch;
    //return &ch;    //编译器警告,返回了局部变量
}

编译器报警,局部指针。

int main(void)
{
    char *c = test_location_pointer();
    printf("c    %p = %ld\r\n\r\n",c,strlen(c));
    char *ch = test_location_pointer();
    printf("ch   %p = %ld\r\n",ch,strlen(ch));
    return 0;
}

结果:

lestly@lestly-virtual-machine:~/桌面/code/pointer$ gcc pointer.c -o pointer
lestly@lestly-virtual-machine:~/桌面/code/pointer$ ./pointer 
a    0x7ffd69943e80
b    0x5645bdeb1004
c    0x5645bdeb1004 = 8

a    0x7ffd69943e80
b    0x5645bdeb1004
ch   0x5645bdeb1004 = 8

可以看到地址是不变,内容也不变,表明在堆上的内存依然存在。这个堆上的内存也不需要我们释放,系统会帮我们自动处理(未知??),一般我们只需要malloc和free配对即可。局部指针应该会被自动释放,但是它的地址也不变,是编译器优化吗??求解答。

相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页