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

标签 c string pointers memory malloc

#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)“丢失”并导致内存泄漏。

关于c - 为什么我可以将更长的字符串分配给 C 中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072431/

相关文章:

c++ - 使用openmp时出现编译错误

c - 未初始化的全局变量在 c 中总是默认为 0 吗?

string - 如何从路径中提取文件名?

java - 在 Java 中传递和编辑原始对象

c - 有没有一种方法可以可靠地分配与先前释放的 block 相同的内存块,然后访问先前在其中的内容?

c++ - 如何将指针作为函数参数返回

swift - 迭代字符串的 UTF8View 时显示的不同类型

c - 如何使用strcat()函数?

c++ - 从指针数组中删除元素 - C++

c++ - C++ 中的指针和多维数组