我有这段代码:
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”的内存泄漏。 谁能告诉我为什么?我以为我的确非常好,但这是我发现内存泄漏的唯一地方。
谢谢。
答案 0 :(得分:4)
您在该例程中修改tagCopy
几次,然后尝试稍后释放它。可能很危险。在调用tagCopy
之前,您还要将NULL
设置为free()
,因此每次尝试释放NULL
而不是您分配的实际内存时。