gpt4 book ai didi

c++ - malloc 中数字对象的用法

转载 作者:行者123 更新时间:2023-11-30 18:17:39 24 4
gpt4 key购买 nike

我是编程新手,我正在尝试理解之间的区别

A = (char * ) malloc(sizeof(char)*n);

A = (char * ) malloc(sizeof(char)); 

A = new char [n];

A = new char;

当我没有指定特定数据类型的对象数量时,编译器分配给该指针的默认内存是多少。

当我声明时

A = new char [n];
cout << A[n+1];

它不会给我带来段错误。

它不应该给出段错误吗,因为我试图访问超出为数组分配的内存。

最佳答案

内存不是“分配给这个指针”的,它是被分配的,然后你得到一个指向内存的指针。

这个:

char *a = malloc(sizeof(char) * n);

相同
char *a = malloc(n);

因为 sizeof(char) 总是 1。它们都为 n 个字符的数据分配空间,并返回一个指向可以访问第一个字符的位置(失败时为 NULL)。

此外,the casts are not needed in C ,你不应该有任何。

由于 sizeof(char) 为 1,第二次调用相当于:

char *a = malloc(1);

这意味着它分配了一个大小为 1 的内存块。这当然与指向该内存块的指针不同(存储在指针变量 a 中的值) >)。指针很可能大于 1 个字符,但这不会影响 block 的大小。

malloc() 的参数指定要分配空间的字符数。

我忽略了 new 用法,因为那是 C++ 并且问题被标记为 C。

关于c++ - malloc 中数字对象的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com