我目前正在使用以下代码来降低"降低"字符串:
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
的东西吗?是不确定的行为?我想知道!
答案 0 :(得分:2)
使用++ptr;
,丢失 malloc()
返回的指针。除非将内存分配器函数返回的确切指针传递给free()
,否则您将调用undefined behavior。
解决方案:您需要将实际返回指针的副本保留在某处,以便稍后传递给free()
。