使用指针算法迭代,可能的内存泄漏?

时间:2017-01-16 13:50:05

标签: c loops memory-leaks free dynamic-memory-allocation

我目前正在使用以下代码来降低"降低"字符串:

void strlower(char** string)
{
    char* ptr = malloc((strlen(*string)+1) * sizeof **string);
    memcpy(ptr, *string, (strlen(*string)+1) * sizeof **string);

    while (*ptr) {
        if (*(ptr) >= 'A' && *(ptr) <= 'Z') {
            memset(*string + (strlen(*string) - strlen(ptr)), (char)(*(ptr)+32), sizeof **string);
        }
        ++ptr;
    }
    memcpy(*string, ptr, (strlen(*string) +1) * sizeof **string);  

    /// free(ptr); THROWS ERROR
    free(ptr);
    ptr = NULL;
}

如果我尝试free(ptr);我分配了malloc它会给我一个例外。

是否有内存泄漏?我不能释放它,因为它是空的吗?有null pointer的东西吗?是不确定的行为?我想知道!

1 个答案:

答案 0 :(得分:2)

使用++ptr;丢失 malloc()返回的指针。除非将内存分配器函数返回的确切指针传递给free(),否则您将调用undefined behavior

解决方案:您需要将实际返回指针的副本保留在某处,以便稍后传递给free()