簡體   English   中英

為什么我的程序會打印出奇怪的數組值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM