#include <stdio.h>
#include <stdlib.h>
int main()
{
char *ptr = malloc(sizeof(char) * 1);
ptr = "Hello World";
puts(ptr);
getchar();
}
我不是malloc()专家,但是不是因为我只分配了一个字节而是分配了一个包含11个字节到* ptr指针的值的代码应该给出错误吗? 或者H是否存储在我指定的位置,然后字符串的其余部分才会进入后面的位置?
答案 0 :(得分:6)
您正在将指针'ptr'重新分配给另一个内存块,因此您不会看到任何错误。但是,您分配的内存块(大小为1)“丢失”并导致内存泄漏。
答案 1 :(得分:1)
使用malloc
时,您要求一些内存,malloc
返回该内存的第一个地址(如果可以给出)。当你重新分配指针时,你没有对它所指向的内存做任何事情。您只需更改指针指向的即可。
你在这里做的是技术上有效的C 但是你正在创建内存泄漏,因为你丢失了malloc
内存的地址,你必须{{1}当你完成它的时候。