C - realloc没有反映回main

时间:2016-07-17 16:34:26

标签: c function pointers malloc realloc

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

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

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

提前致谢。

代码:

#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

1 个答案:

答案 0 :(得分:1)

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

另外,不要在你知道为null的指针上调用free()(当malloc失败时)。它没有做任何事情。