为什么我可以给C中的指针赋一个更长的字符串?


#include <stdio.h> 
#include <stdlib.h>
int main()
{
    char *ptr = malloc(sizeof(char) * 1);
    ptr = "Hello World";
    puts(ptr);
    getchar();
}

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

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

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

您在这里所做的在技术上是有效的C 但是您正在创建内存泄漏,因为您丢失了malloc ed内存的地址,当您完成它时,您必须free

相关内容

  • 没有找到相关文章

最新更新