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

using pointer arithmetic to iterate, possible memory leak?

我目前正在使用以下代码获取 "lowered" 字符串:

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 有什么关系吗?这是未定义的行为吗?想知道!

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

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