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

标签 c memory malloc

我只是想知道,在下面的场景中,'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/

相关文章:

c - 超声波传感器距离测量,可变溢出

c - 如何在 c 中解决这个 fork() 示例,

c - 如何获得可以分配的最大可用内存块?

ios - Swift 内存布局

c - malloc:已释放对象的校验和不正确

c - 如何成功地将二维数组传递给函数?

有人可以告诉为什么 "-' 0' "在以下函数的第五行中完成

java - 为什么整数在 java 中仅对小于 128(默认值)的值充当实习生

c - 为什么即使未指定大小,scanf 和 malloc 到 char 指针也能工作?

检查 malloc/calloc 的分配