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

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

    puts(ptr);
    getchar();
}

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

===============>>#1 票数:6

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

===============>>#2 票数:1

使用malloc您需要一些内存,而malloc返回该内存的第一个地址(如果可以给定的话)。 当您重新分配指针时,它所指向的内存没有任何作用。 你只需要改变什么指针指向。

您在此处执行的操作在技术上是有效的C, 但是由于您丢失了已malloc内存的地址,因此会造成内存泄漏,使用完该地址后必须free该地址。

  ask by translate from so

未解决问题?本站智能推荐: