C - realloc 不反映回 main

C - realloc not reflecting back to main

我目前正在学习动态内存管理是如何工作的,更具体地说是 realloc 以及它是如何在函数中完成的。

在下面的程序中,我只是想尝试使用 malloc 在函数 a() 中分配一些数字,然后将它们传递给另一个函数 b()。在 b() 中,我将指针的地址传递给 c() 以便重新分配两倍大小的内存并用数字对其进行初始化。

现在回到我的问题:为什么函数 b() 中的输出显示正确的数字,但在 main 函数中却没有? main 中的指针 "numbers" 不应该也指向重新分配的内存吗?

提前致谢。

代码:

#include <stdlib.h>
#include <stdio.h>

#define SIZE 3

int a(int **numbers);
int b(int *numbers);
int c(int **numbers);

int main()
{
  int *numbers = NULL;

  a(&numbers);

  for(size_t i = 0; i < 2 * SIZE; i++)
    printf("In main after a: %i\n", numbers[i]);

  b(numbers);

  for(size_t i = 0; i <  2 * SIZE; i++)
    printf("In main after b: %i\n", numbers[i]);

  return 0;
}

int a(int **numbers)
{
  *numbers = malloc(SIZE * sizeof(numbers));
  if(!numbers)
  {
    free(numbers);
    return -1;
  }


  for(size_t i = 0; i < SIZE; i++)
    (*numbers)[i] = i;

  return 0;
}

int b(int *numbers)
{
  c(&numbers);

  for(size_t i = 0; i < 2 * SIZE; i++)
    printf("In b after c: %i\n", numbers[i]);

  return 0;
}

int c(int **numbers)
{
  int *n_new = realloc(*numbers, 2 * SIZE * sizeof(numbers));
  if(!n_new)
  {
    free(n_new);
    return -1;
  }

  for(size_t i = 0; i < 2 * SIZE; i++)
    n_new[i] = i * 2;

  *numbers = n_new;

  return 0;
}

输出:

In main after a: 0
In main after a: 1
In main after a: 2
In main after a: 0
In main after a: 0
In main after a: 0
In b after c: 0
In b after c: 2
In b after c: 4
In b after c: 6
In b after c: 8
In b after c: 10
In main after b: 0
In main after b: 0
In main after b: 2
In main after b: 0
In main after b: 0
In main after b: 0

您还需要通过指针将指针传递给 b()。就目前而言,调用 b(pointer) 不能修改 main() 中的指针。以与调用 a(&pointer) 相同的方式执行。

此外,不要在您知道为空的指针上调用 free()(当 malloc 失败时)。它什么都不做。