当我尝试释放内存时,我得到一个memallocation错误,但当我尝试释放内存而不定义名称时,它工作正常。
输入内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char* name = malloc(5 * sizeof(char));
name = "Jeff";
printf("%s",name);
free(name);
}
产量
0 [main] memallocation 1434 cygwin_exception::open_stackdumpfile: Dumping stack trace to memallocation.exe.stackdump
你得到一个错误,因为你没有释放你认为的东西。
当你这样做时,
name = "Jeff";
你覆盖了从 malloc
与字符串常数的地址 "Jeff"
. 所以当你打电话 free
你传递给它的是字符串常量的地址。
复制字符串的正确方法是使用 strcpy
函数。
strcpy(name, "Jeff");
这将字符串复制到内存缓冲区返回的 malloc
. 那么你可以放心地打电话 free
上。