FTTD 发表于 2021-7-10 12:08:20

C语言跨函数使用内存


#include <stdio.h>
#include <malloc.h>

void f (int **q)
{
        int i=999;
       *q=(int *)malloc(sizeof(int));//*q=&i;
       **q=i;//*q=&i不行; 这是为啥不能换
       
}

int main (void)
{
        int *p;
        f(&p);
        printf("%d\n",*p);

        return 0;
}

请问f函数中的**q改成*q=&i;最后输出的*p为什么是垃圾值;

#include <stdio.h>

void f (int **q);

int main (void)
{
        int *p;
        f(&p);
        printf("%d\n",*p);
        return 0;
}

void f (int **q)
{
        int i=100;
        *q=&i;//**q=i; 不行 这是为啥不能换
}*/

请问谁能解释一下这俩个代码的区别啊。

qiuyouzhi 发表于 2021-7-10 13:23:58

因为 i 是一个局部变量吧,指针会变成野指针

永恒的蓝色梦想 发表于 2021-7-10 16:34:23

*q=&i 只给了个地址,但是 i 在函数完了之后也没了,地址指向一堆垃圾

万千只cnm 发表于 2021-7-11 11:23:59

i生存期只在调用函数存在
返回就释放了
所以是垃圾值
页: [1]
查看完整版本: C语言跨函数使用内存