use*_*873 5 c string memory-leaks c-strings string-literals
我对这个简单的例子有一些误解:
char *s = "abc";
s = "def";
Run Code Online (Sandbox Code Playgroud)
第二个字符串的赋值会导致内存泄漏,还是会被正确替换?如果前者是真的,我该如何替换s正确方法的价值?
这两个字符串都是静态定义的,因此不存在内存泄漏。泄漏的内容是:
char *s = strdup("abc"); // dynamic memory allocation
s = "def";
Run Code Online (Sandbox Code Playgroud)
实际上,由于您无法再使用,因此存在少量静态内存浪费(不会称为泄漏)"abc"。
但由于即使通过调用代码所在的例程也无法重复它,所以我绝对不会称其为泄漏。
现在,如果你有char s[] = "abc";(数组,而不是指针)和一个"def"相同大小的字符串,你可以这样做:
strcpy(s,"def");
Run Code Online (Sandbox Code Playgroud)
替换字符串的内容(但不要在静态分配的指针上执行此操作,如定义代码:未定义的行为)。