我想創建一個封裝動態分配數組的結構。它看起來像這樣:Calloc()不分配零
typedef struct IntArray {
int *field;
size_t length;
} IntArray;
然後,我有創造這樣的IntArray結構的函數:
IntArray *createIntArray(size_t length) {
IntArray *output;
if ((output = malloc(sizeof(IntArray))) == NULL) {
return NULL;
}
output->field = calloc(length, sizeof(int));
output->length = length;
return output;
}
這裏的主:
int main() {
size_t size = 10;
IntArray *test = createIntArray(size);
for (int i = 0; i < size; i++) {
printf("%d\n", test[i]);
}
}
我希望釋放calloc( )用零初始化內存,但是輸出很奇怪:
我認爲這些數字是內存地址,但他們在哪裏來的?每次啓動程序時,數字都會改變,但會保持在1.和6.位置。
爲什麼會發生這種情況?
編輯:
我意外地混合起來釋放calloc()和malloc這裏#1,這個問題實際上與上述
1)'輸出=釋放calloc(長度,的sizeof(int)的)' - >'輸出=釋放calloc(長度,的sizeof(IntArray )''printf(「%d \ n」,test-> field [i]);''''printf(「%d \ n」,test [i]); %d \ n「,test [index] .field [i]);'(未初始化) – BLUEPIXY
如果您使用我們在這裏推薦的模式,那麼這個錯誤不會發生......'output = calloc(length,sizeof * output )' –
3)'test [i]'的類型是'IntArray',而不是'int'。 – BLUEPIXY