有一件事我不確定,因此現在的問題,我希望標題在這裏確定。檢查內存請求兩次
讓我們首先檢查以下項目:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person{
char *fn;
};
int main(void){
struct person *pers;
pers = malloc(sizeof(struct person));
if(pers == NULL){
printf("No memory Avaible\n");
exit(1);
}
pers->fn = malloc(10000000000000000); /*requesting a big chunk*/
if(pers->fn == NULL){
printf("No memory Avaible =>> [pers->fn]\n");
free(pers);
exit(2);
}
strcpy(pers->fn, "Michi");
pers->fn[strlen(pers->fn)] = '\0';
printf("FN = %s\n",pers->fn);
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
}
輸出將是:
No memory Avaible =>> [pers->fn]
因爲沒有可用內存,我做了免費的pers
然後exit
:
if(pers->fn == NULL){
printf("No memory Avaible =>> [pers->fn]\n");
free(pers);
exit(2);
}
現在讓我們說我們有足夠的內存和親克做工精細,後者我們得出這樣的部分:
if(pers->fn){
free(pers->fn);
}
if(pers){
free(pers);
}
有,我應該檢查內存仍然存在任何保證? 或者我只是罰款:
free(pers->fn);
free(pers);
記憶不存在的唯一原因是如果你或其他人爲你解救了它。當你退出不良分配時,價值必須在那裏。我只會在檢查是否有其他人爲你改變或釋放它的機會。順便說一句,'10000000000000000'溢出了malloc int,但我相信你知道這一點:) –
因爲你的程序無條件地退出,如果** malloc()**是不成功的,沒有理由檢查退出。其他程序可能具有不同的邏輯流程,並且可能需要在退出時進行檢查。 –
@MichaelDorgan我有辦法模擬:)) – Michi