#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
。