2014-02-26 65 views
1

運行INT一個奇怪的場景,比我要求的malloc被分配更多的內存:Ç - 的malloc分配太多內存

void function (int array [], int numberOfElements) { 

int *secondArray = malloc(sizeof(int) * numberOfElements/2); 

for (int i = 0; i < numberOfElements/2; i++) { 
    secondArray[i] = array[i]; 
    } 
} 

假設數組是一些10個號碼。當我在上述代碼之後打印出secondArray,我得到:

enter image description here

所以首先,數組應爲5個元素。但第二,爲什麼0到底?我爲mallocing只有10/2 = 5整數的空間。

編輯:

打印代碼:

for (int d = 0; d < numberOfElements; d++) { 
    printf("%i ", secondArray[d]); 
} 

嗯,我可能剛纔已經回答這裏我自己的問題,我猜它超出了secondArray印刷,顯示0,而不是數組本身。

-

其實,問題是,我也沒有這樣做:

secondArray[numberOfElements] = '\0'; 

這就是爲什麼它被印超越。

+0

由於您不顯示打印代碼,我們只能猜測。一個合理的猜測是,你打印'for(int i = 0; i

+0

我將添加打印代碼 – Live2Enjoy7

+1

我可能回答了我自己的問題 – Live2Enjoy7

回答

2

malloc實際上是正確地分配正確的金額。

但是,您正在訪問分配以外的內存。

什麼存在是完全未定義的,可能真的是任何東西。

就你而言,這是一個「垃圾」號和四個零。

0

你真幸運。 Malloc可以並且有時會從操作系統的更多內存中請求 - 考慮到分頁。有時候甚至不需要詢問操作系統的內存,因爲它已經提前要求額外的內存。因此,malloc可以請求一頁內存 - 更多的內容足以滿足您的請求,並且額外的內存恰好被零填充。

你是在未定義的行爲之地。所以所有投注都關閉。

0
its print 0 0 0 0 because in C no array bound if you define your array size is 4 but u 
want to store data more than array size you can store so you print your array 
for(i = 0; i < numberOfElements; i++) its give data and 0 also because you store the data 
only 5 position but you print it max size so it give you 0 0 0 

int *secondArray = malloc(sizeof(int) * numberOfElements/2); // no matter either use it or 
int *secondArray = malloc(sizeof(int)); 
// this will take same memory