使用指针算法迭代,可能的内存泄漏?
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()
。
我目前正在使用以下代码获取 "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()
。