1

以下代码是否包含字符串中前三个字符的内存泄漏?

char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);

谢谢。

4

3 回答 3

11

它比泄漏更糟糕,您不应该free使用未从malloc(或realloc/ calloc)返回的指针进行调用。您可能会发生泄漏,崩溃,或者谁知道还有什么……您所做的是未定义的行为

于 2012-06-14T16:01:46.747 回答
0

是的,它会泄漏。

free需要一个由 . 返回的指针malloc/realloc/calloc。因为,你已经改变了,它肯定会泄漏。

于 2012-06-14T16:03:25.263 回答
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);
于 2012-06-14T16:07:20.627 回答