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

1 c memory string malloc pointers

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

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

    puts(ptr);
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

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

For*_*med 6

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