有人可以告訴我如何使用 realloc 來正確擴展 calloc 嗎?
我的期望: 所有 20 個插槽的值都為 0。
結果:只有 calloc 插槽的值為 0,我用 realloc 分配的插槽有亂數。輸出圖片
#include <stdio.h>
#include <stdlib.h>
int main(){
int *ptr;
int i;
int n =10;
ptr = (int*)calloc(n, sizeof(int)); //first time allocate with calloc
ptr = (int*)realloc(ptr,2*n*sizeof(int)); //extend with realloc
for(i=0;i<2*n;i ){
printf("ptr[%d]: %d \n", i, ptr[i]);
}
return 0;
}
注意:在有人問我為什么不直接使用calloc(20,sizeof(int));. 這不是我正在撰寫的真正程式,這只是一個簡短的演示,以便人們可以更輕松地看到我的問題。我實際上打算在程式的后期擴展 calloc。
我試圖在創建這個問題之前找到答案。我有谷歌這個:
- 如何正確重新分配?
- 如何擴展 Calloc?
- 如何將 realloc 與 calloc 一起使用?
- calloc() 和 realloc() 編譯問題
- 和上面幾個類似。
但我似乎找不到真正的答案(我可能錯過了,我真的很抱歉)。我得到的大部分答案是他們像我一樣使用 realloc 來擴展 calloc ,但這正是我的問題。抱歉英語不好。
uj5u.com熱心網友回復:
C 標準不提供任何執行重新分配并將附加記憶體歸零的例程。為此,您可以自己實作它,方法是使用realloc重新分配記憶體并使用以下命令清除memset:
int *newptr = realloc(ptr, 2 * n * sizeof *newptr);
if (!newptr)
{
fprintf(stderr, "Error, unable to allocate memory.\n");
exit(EXIT_FAILURE);
}
ptr = newptr;
memset(ptr n, 0, n * sizeof *ptr);
n *= 2;
你當然可以把它包裝成一個例程,比如一個叫做 的例程crealloc,然后使用它。(與用于記憶體管理的庫函式不同,它必須傳遞先前分配的大小,因為您撰寫的代碼通常無法訪問提供該大小的記憶體管理資料結構。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448871.html
上一篇:在vs代碼中使用win32API
