2010-07-16 70 views
0

我有這樣的代碼:的ipad,需要有一個內存泄漏的幫助

void getStringWithTag(char* pFile, long sizeSound, char* tag, char* ret, float* currentPos){ 
char* tagCopy; 
tagCopy = (char*)malloc(256 * sizeof(char)); 
int totalLen = 0; 
int tempLen = 0; 
memset(tagCopy, 0, 256); 
memset(ret, 0, 128); 
pFile += ((int)*currentPos); 
while (totalLen+(*currentPos) < sizeSound) { 
    if (*pFile == '<') { 
     pFile += 5; 
     totalLen += 5; 
     while(*pFile != '>'){ 
      *tagCopy = *pFile; 
      tagCopy++; 
      pFile++; 
      totalLen++; 
      tempLen++; 
     } 
     tagCopy -= tempLen; 
     tempLen = 0; 
     if (strcmp(tagCopy, tag) == 0) { 
      pFile++; 
      totalLen++; 
      while (*pFile != '<') { 
       *ret = *pFile; 
       ret++; 
       pFile++; 
       totalLen++; 
       tempLen++; 
      } 
      ret -= tempLen; 
      *currentPos += totalLen; 
      tagCopy = NULL; 
      free(tagCopy); 
      return; 
     }else{ 
      memset(tagCopy, 0, 256); 
     } 
    } 
    pFile++; 
    totalLen++; 
} 
tagCopy = NULL; 
free(tagCopy); 
*currentPos = sizeSound; 
ret = NULL; 
} 

這顯然給了我與「tagCopy」內存泄漏。 誰能告訴我爲什麼?我以爲我有這個不錯的,但這是唯一的地方,我得到一個內存泄漏。

謝謝。

回答

4

您在該例程中修改tagCopy幾次,然後嘗試稍後釋放它。可能很危險。在調用free()之前,您還將tagCopy設置爲NULL,因此每次嘗試釋放NULL而不是您分配的實際內存時。

+0

嗯,你有什麼建議如何解決它? – funckymonk 2010-07-16 04:28:06

+2

說得好。最好使用數組語法('tagCopy [i]')或別名指針。修改'tagCopy'使其更難分析。 – 2010-07-16 04:28:17

+0

@funckymonk,馬修有很好的建議。我會說1)不要麻煩將其設置爲NULL,並且2)避免在例程中修改它(或者如果您願意,可以保存原始指針的副本以便隨後釋放)。 – 2010-07-16 05:01:04

相關問題