以下代码是否包含字符串中前三个字符的内存泄漏?
char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);
感谢。
答案 0 :(得分:11)
比泄漏更糟糕的是,您不应该使用未从free
(或malloc
/ {{1}返回的指针调用realloc
})。您可能会发生泄漏或崩溃,或者谁知道还有什么......您所做的是未定义的行为。
答案 1 :(得分:0)
是的,它泄漏了。
free
需要malloc/realloc/calloc
返回的指针。既然,你已经改变了,它肯定会泄漏。
答案 2 :(得分:0)
您可能希望通过测试证明这一点,但我相信您的问题的答案是,增加指针可能会导致未定义的行为,尽管您看到内存泄漏。
我这样说,因为在你的例子中没有任何地方看起来你已经保留了指向已分配内存的原始指针。有可能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);