[英]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 docs , realloc
返回指針,您可以將其直接存儲在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.