我試圖追捕內存泄漏,並找到一個來源。我是一個函數中的指針,並將它釋放到另一個函數中,但我錯過了解如何複製指針指向的值,同時也能夠釋放指針。複製和釋放malloc'ed指針
Current implementation (with memory leak):
// This code has been greatly simplified
// and as such does not appear to have any purpose
int foo(){
int bestval = 0;
char *best;
char *match;
for (int i=0;i<3;i++) {
int returnValue = bar(&best);
if (returnValue > 10) {
(1)
match = best;
}
}
printf("%s", match);
(2)
return 0;
}
int bar(char ** best) {
char*s = "Hello!";
*best = malloc(strlen(s) + 1);
strcpy(*best,s);
return 0;
}
兩個問題
如果我有空閒內存在,而不是(2),我會怎麼做,所以那場比賽仍然會是什麼載於最好的(1) ?
我應該做strcpy複製最佳匹配?如果是這樣,我是否必須在foo內做另一個malloc?
假設有一個自由點二,你發佈的代碼不漏,但後「 2',這個點之後匹配無效......你是否在循環中運行這段代碼? – forsvarir 2011-04-11 07:23:32
爲什麼你需要2個「最好」和「匹配」指針? (2)你可以簡單地使用'best'和'free'。 – Naveen 2011-04-11 07:23:57
@forsvarir,是的,我在一個循環中運行它,這就是爲什麼我在(1)處實現免費的原因。 – Rio 2011-04-11 07:26:26