以下代码是否包含字符串中前三个字符的内存泄漏?
char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);
谢谢。
以下代码是否包含字符串中前三个字符的内存泄漏?
char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);
谢谢。
它比泄漏更糟糕,您不应该free
使用未从malloc
(或realloc
/ calloc
)返回的指针进行调用。您可能会发生泄漏,崩溃,或者谁知道还有什么……您所做的是未定义的行为。
是的,它会泄漏。
free
需要一个由 . 返回的指针malloc/realloc/calloc
。因为,你已经改变了,它肯定会泄漏。
您可能想通过测试来证明这一点,但我相信您的问题的答案是增加指针会导致未定义的行为,尽管您会看到内存泄漏。
我这么说是因为在您的示例中,您似乎没有保留指向已分配内存的原始指针。指针指向基地址以外的某个位置时,free 可能会做错事。
为确保您需要
1) 查看系统上正在使用的 RAM,尽可能少地运行其他内存
2) 运行程序几次,然后
3)然后再次查看内存使用情况。
然后通过如下更改您的代码再次尝试所有这些:
char * mem_ptr = (char*)malloc(21 * sizeof(char));
char * str = mem_ptr;
strcpy(str, "01234567890123456879");
str = str + 3;
free(mem_ptr);