请考虑以下代码:
int main()
{
char* s = (char*) malloc(sizeof(char)*10);
s="hello";
free(s);
}
Run Code Online (Sandbox Code Playgroud)
执行此程序时,我收到一个错误:
** glibc detected *** free(): invalid pointer: 0x0000000000400b2c
我对这个错误的研究表明它可能是由于没有分配足够的内存空间引起的malloc().但程序已经调用malloc(),产生足够的空间10 char秒.
Edd*_*tes 10
s="hello";
Run Code Online (Sandbox Code Playgroud)
您正在为s分配另一个地址到静态分配的内存.解放它是不正确的.此外,既然你这样做,你基本上泄漏了你在这里分配的内存:
char* s = (char*) malloc(sizeof(char)*10);
Run Code Online (Sandbox Code Playgroud)
尝试:
int main()
{
static const size_t kBufferSize = 10;
char* s = (char*) malloc(sizeof(char) * kBufferSize);
strncpy(s,"hello", kBufferSize); // better than strcpy, you are protecting
// yourself from a buffer overflow
free(s);
}
Run Code Online (Sandbox Code Playgroud)
后:
s="hello";
Run Code Online (Sandbox Code Playgroud)
s不再指向动态分配的内存.它指向字符串文字"hello".你不能释放它,因为它首先没有被malloc编辑.你已经泄露了这个分配,因为你不再有指针.
查看strncpy将一个C字符串复制到另一个C字符串的函数.