为什么我可以为C中的指针分配更长的字符串?

时间:2013-04-18 00:13:22

标签: c string pointers memory malloc

#include <stdio.h> 
#include <stdlib.h>

int main()
{
    char *ptr = malloc(sizeof(char) * 1);
    ptr = "Hello World";

    puts(ptr);
    getchar();
}

我不是malloc()专家,但是不是因为我只分配了一个字节而是分配了一个包含11个字节到* ptr指针的值的代码应该给出错误吗? 或者H是否存储在我指定的位置,然后字符串的其余部分才会进入后面的位置?

2 个答案:

答案 0 :(得分:6)

您正在将指针'ptr'重新分配给另一个内存块,因此您不会看到任何错误。但是,您分配的内存块(大小为1)“丢失”并导致内存泄漏。

答案 1 :(得分:1)

使用malloc时,您要求一些内存,malloc返回该内存的第一个地址(如果可以给出)。当你重新分配指针时,你没有对它所指向的内存做任何事情。您只需更改指针指向的即可。

你在这里做的是技术上有效的C 但是你正在创建内存泄漏,因为你丢失了malloc内存的地址,你必须{{1}当你完成它的时候。