【发布时间】:2016-12-21 05:52:54
【问题描述】:
案例 1:我编写了以下 c 程序,当我检查内存泄漏时,我在这一行 str = (char*)malloc(10); 发现内存泄漏,即使我已经编写了释放该内存的语句
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str;
str = (char*)malloc(10);
str = "string";
printf("length : %ld\n",strlen(str));
free(str);
return 0;
}
案例 2:
当我用strcpy() 替换str="string" 时没有任何泄漏,为什么会这样?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str;
str = (char*)malloc(10);
strcpy(str,"string");
printf("length : %ld\n",strlen(str));
free(str);
return 0;
}
【问题讨论】:
-
案例 1 表现出未定义的行为:您不会在从
malloc()获得的同一指针上调用free()。而在情况 2 中,您可以这样做。 -
1)
str = "string";它被一个指向字符串文字的指针覆盖。 -
案例1。
str = "string"- 错误,因为它没有复制字符串操作;必须是strcpy(str, "string"),如 case2 -
@nikniknik2016 std::string?它是 C 而不是 C++。
标签: c string memory-leaks