为了学习一些关于指针的知识,我尝试创建一个程序,为给定大小的数组分配内存(其中大小由常量 ARR_SIZE
的值定义)和将该数组的元素打印到控制台。
我无法理解我得到的结果...例如,当我运行下面显示的代码时,我得到 {0, 4206628, 4206628, 3, 4, 5, 6, 2686696, 8, 9 }
,这对我来说完全没有意义。我想知道这种行为的原因是什么以及要修改什么以获得预期的结果。
#define ARR_SIZE 10
void print_array(int loc);
int memory_alloc();
int main()
{
int array_loc = memory_alloc();
print_array(array_loc);
return 0;
}
void print_array(int loc)
{
int i = 0;
int *arr_ptr;
arr_ptr = loc;
while(i < ARR_SIZE)
{
printf("%d\n", *arr_ptr);
*(arr_ptr++);
i++;
}
}
int memory_alloc()
{
int array[ARR_SIZE];
int i = 0;
for(i; i < ARR_SIZE; i++)
{
array[i] = i;
}
return &array;
}
最佳答案
您观察到的是未定义行为,因为在 memory_alloc
中创建的数组仅存在于此函数的范围内。一旦程序离开它,该数组将不再存在。
另一种方法是在堆中分配数组:
int memory_alloc()
{
int *array = malloc(ARR_SIZE * sizeof(int));
int i = 0;
for(i; i < ARR_SIZE; i++)
{
array[i] = i;
}
return array;
}
使用完数组后,应该将其释放。
int main()
{
int* array_pointer = memory_alloc();
// use array here
free(array_pointer);
return 0;
}
关于c - 为什么我的程序打印出奇怪的数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784941/