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

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

    puts(ptr);
    getchar();
}

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

4

2 回答 2

6

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

于 2013-04-18T00:17:17.447 回答
1

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

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

于 2013-04-18T00:19:20.260 回答