0

我正在尝试通过编写简单的代码片段来学习指针。我今天写了以下内容,

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

void funcall1(int *arr_p, int *num_elements_p)
{
  int i = 0;
  *num_elements_p = 10;
  int *temp = (int *)malloc(10 * sizeof(int));
  if (temp != NULL)
  {
    arr_p = (int *)temp;
  }
  else
  {
      free(arr_p);
      printf("Error\n");
      return;
  }
  printf("\n------------------------funcall1------------------------------\n");
  for (i=0; i<(*num_elements_p); i++)
  {
      arr_p[i]= i;
      printf ("%d\t", arr_p[i]);
  }

}
int main()
{
  int *arr = NULL;
  int num_elements = 0;
  int i = 0;
  /*int *temp = (int *)malloc(10 * sizeof(int));
  if (temp != NULL)
  {
      arr = (int *)temp;
  }
  else
  {
      free(arr);
      printf("Error\n");
      return;
  }*/

  funcall1(arr, &num_elements);
  printf("\n------------------------Main------------------------------\n");
  for (i=0; i<num_elements; i++)
  {
    printf ("%d\t", arr[i]);
  }
  printf ("\n");
  free(arr);
  return 0;
}

当我在主函数中使用 malloc 时,代码按预期工作;但是当我在被调用函数中使用它时,它没有,我得到分段错误。我进行了一些研究并了解了一些基础知识,例如 1. 数组名称实际上是指向数组中第一个元素的指针。所以,我正确地传递了参数。2. 数组得到更新,因为我也在被调用函数中打印数组。

由于 arr_p 实际上是指向 arr 指向的位置,所以当我执行 "arr_p = (int *)temp" 时,不是说 arr 也指向这个分配的内存空间吗?我正在寻找内存中发生的情况,为什么我会在这里遇到内存访问冲突?我不想用一些部分推导的假设来说服自己。

4

0 回答 0