我正在尝试通过编写简单的代码片段来学习指针。我今天写了以下内容,
#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 也指向这个分配的内存空间吗?我正在寻找内存中发生的情况,为什么我会在这里遇到内存访问冲突?我不想用一些部分推导的假设来说服自己。