幾周前,我試圖實作一個顯示四叉樹的函式。我目前的問題是關于同樣的作業,所以我把這個鏈接傳遞給你所有的背景關系:
如您所見,記憶體之前和之后的顯示沒有區別。
這是最簡單的情況,之后它也應該適用于合成影像,例如
- N BBNB B N NNB NBNNBN。
有人建議我使用 valgrind,告訴我要讓我的程式正常作業,malloc() 必須與 free() 一樣多。但我真的不知道如何解釋結果(以及它是否真的有用)。
結果(我的變數名不是英文所以,affichageNormal == normalDisplay,Rendmemoire == freeMemory 和 Construit_noir == Build_black)

P.S. I also have two function isWhite and isBlack to tell if a picture is black (no white elements) or white (no black element):
int isWhite(image myImage)
{
if(myImage == NULL)
{
return 1;
}
else if(myImage->allBlack)
{
return 0;
}
else if(isWhite(myImage->son[0]) && isWhite(myImage->son[1]) && isWhite(myImage->son[2]) && isWhite(myImage->son[3]))
{
return 1;
}
return 0;
}
int isblack(image myImage)
{
if(myImage == NULL)
{
return 0;
}
else if(myImage->allBlack)
{
return 1;
}
else if(isBlack(myImage->son[0]) && isBlack(myImage->son[1]) && isBlack(myImage->son[2]) && isBlack(myImage->son[3]))
{
return 1;
}
return 0;
}
It may be useful for the function.
Edit: In case of doubt I also add the code of normalDisplay :
void normalDisplay(image myImage)
{
if(myImage == NULL)
{
printf("B");
}
else if(myImage->allBlack)
{
printf("N");
}
else
{
printf(" ");
normalDisplay(myImage->son[0]);
normalDispay(myImage->son[1]);
normalDisplay(myImage->son[2]);
normalDisplay(myImage->son[3]);
}
}
uj5u.com熱心網友回復:
從四叉樹中釋放記憶體的一種可靠方法是確保您反饋指標不再指向有效記憶體。由于您的 currentfreeMemory只需要一個block_image指標,因此該函式無法將此資訊傳達回呼叫者。
更好的辦法是改變它的介面,以便為它提供另一個級別的間接性。
void freeMemory(image *myImage) {
if (myImage != NULL && *myImage != NULL) {
int sonSize = sizeof((*myImage)->son) / sizeof((*myImage)->son[0]);
while (sonSize) freeMemory(&(*myImage)->son[--sonSize]);
free(*myImage);
*myImage = NULL;
}
}
附帶說明一下,您的原件freeMemory確實存在記憶體泄漏,但希望您能解決這個問題。
這樣,*myImage = NULL將把這個變化傳達給呼叫者。在呼叫方,它看起來像這樣:
puts("\nfreeMemory\n");
image white = Build_white();
image black = Build_black();
puts("before");
normalDisplay(black);
puts("");
puts("after");
freeMemory(&black);
normalDisplay(black);
puts("");
puts("before");
normalDisplay(white);
puts("\nafter");
freeMemory(&white);
normalDisplay(white);
puts("");
有了這個,您normalDisplay將更好地為您提供情況的“影像”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/412203.html
標籤:
上一篇:將網格轉換為加權鄰接表
下一篇:帶有雙鍵C 的映射
