ipad, нужна помощь с утечкой памяти - PullRequest
0 голосов
/ 16 июля 2010

У меня есть этот код:

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". Кто-нибудь может сказать мне, почему? Я думал, что у меня все хорошо, но это единственное место, где у меня возникает утечка памяти.

Спасибо.

1 Ответ

4 голосов
/ 16 июля 2010

Вы изменили tagCopy несколько раз в этой процедуре, а затем попытаетесь освободить ее позже.Вероятно, опасно.Вы также устанавливаете tagCopy на NULL перед вызовом free(), поэтому каждый раз, когда вы пытаетесь освободить NULL, а не фактическую выделенную память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...