gpt4 book ai didi

c - 像这样超出范围会释放关联的内存吗?

转载 作者:太空狗 更新时间:2023-10-29 15:42:41 24 4
gpt4 key购买 nike

我只是想知道,在下面的场景中,'stringvar' 使用的内存是否在 method1 执行完成后释放?

// Just some method
void method2(char* str)
{
// Allocate 10 characters for str
str = malloc(10 * sizeof(char));
}

// Just another method
void method1()
{
char* stringvar;
method2(stringvar);

// Is the memory freed hereafter, or do I need to call free()?
}

我问,因为如果我在 method1 的末尾放置一个“free(stringvar)”,我会收到一条警告,指出 stringvar 在 method1 内部被初始化(这是真的)。​​

最佳答案

不,在 method1 之后内存没有被释放,所以你会发生内存泄漏。是的,您需要在使用完内存后调用 free

如果你想让它分配内存,你需要发送一个指向一个指针的指针method2。这是 C 编程中的常见习惯用法,尤其是当函数的返回值保留用于整数状态代码时。例如,

void method2(char **str) {
*str = (char *)malloc(10);
}

char *stringvar;
method2(&stringvar);
free(stringvar);

关于c - 像这样超出范围会释放关联的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com