簡體   English   中英

動態數組使用malloc和realloc?

[英]Dynamic array using malloc and realloc?

我正在嘗試一一收集輸入整數。 我的數組從大小1開始,我想在收集到的每個輸入中將其擴展為1(這是一件很聰明的事情嗎?)

無論如何,這是我設法提供的代碼,但是沒有按預期工作。

在此過程之后,sizeof(array)始終返回8,我認為這意味着該數組僅被調整一次大小。 (sizeof(int)是4位)

嘗試輸出數組會導致第一個輸入變量的多個實例。

輸出代碼

for(int s=0;s<sizeof(array)/sizeof(int);s++){
    printf("%i\n",array[i]);
}

原始代碼:

    int i;
    int size = 1;
    int *array = malloc(size * sizeof(int));
    int position = 0;

    do{
        i = getchar() - 48;
        f (i != -16 && i != -38 && i != 0) {
            array[position] = i;

            position++;
            size++;
            *array = realloc(array, size * sizeof(int));
        }
    } while (i != 0);

更新后仍無法正常工作的代碼

    int i;
    int size = 1;
    int *array = malloc(size * sizeof(int));
    int position = 0;

    do{
        i = getchar() - 48;
        f (i != -16 && i != -38 && i != 0) {
            array[position] = i;

            position++;
            size++;
            array = realloc(array, size * sizeof(int));
        }
    } while (i != 0);
array = realloc(...)

不是*array 根據realloc docsrealloc返回指針,您可以將其直接存儲在array指針中。

編輯讓您的生活更輕松的一件事:使用char常量而不是原始數字。 例如,

i = getchar();
if(i != ' ' && i != '\n' && i != '0') {
 /*    48-16       48-38        48-0      right? */
    array[position] = i - '0';   /* '0' = 48 */

跳到我身上的一件事:在循環中,此行:

*array = realloc(array, size * sizeof(int));

相反,應為:

array = realloc(array, size * sizeof(int));

在原始版本中,您通過先取消引用指針將realloc的結果粘貼在數組的第一個元素中。 沒有星號,您將重新分配數組本身。

(從我的評論中復制粘貼:) sizeof(array)返回8,因為它等於sizeof(int*)array類型為int* ),后者為8(您可能將其編譯為64位)。 sizeof對您如何看待指向數組的指針不起作用。

同樣,出於相同的原因,您的輸出代碼是錯誤的。 您只打印前兩個元素,因為sizeof(array)/sizeof(int)始終為sizeof(array)/sizeof(int) 8/4=2 它應該是

for(int s=0;s<size;s++){
    printf("%i\n",array[s]);
}

(還要注意將索引變量i更改為s ),其中size是您其他代碼塊中的變量。 如果數組是使用指針動態分配的,則無法從sizeof找到數組的長度。 這不可能。 您的代碼必須“記住”數組的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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