[英]Why does my program print out weird array values?
在嘗試了解有關指針的一些知識時,我嘗試創建一個程序,該程序為給定大小的數組(其中大小由常量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;
}
int array[ARR_SIZE];
這里的整數數組是函數的局部變量,函數結束后將不再可用。
要使其正常工作,您可以喜歡
static int array[ARR_SIZE];
和
return array; //no need &
您在memory_alloc()函數中聲明的數組
int array[ARR_SIZE];
此數組是局部變量。 它的作用域在函數memory_alloc()中,此函數返回后,所有局部變量都將被銷毀(array []也是如此)
而是在main()中聲明該數組,然后將該數組傳遞給memory_alloc()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.