如何解决malloc是否隐式定义数组中元素的数量?
我写的帖子说,这是重复的问题,因此已关闭。这不是重复的问题。尽管我非常感谢响应者付出的时间和精力,但他们所做的回答常常不解释发生了什么。请投票重新开放。
请考虑以下内容:
typedef struct node
{
int number;
struct node *left;
struct node *right;
} node;
node *test1 = malloc(511 * sizeof(node));
node (*test2)[1] = malloc(511 * sizeof(node));
test1是一个指针,但是我们可以引用test1 [510],而test2是一个指向包含1个元素的数组的指针,但是我们可以引用test2 [510] [0]
所以在第一种情况下,我基本上是创建一个一维数组,在第二种情况下是创建一个二维数组。
我是正确的,并且在这两种情况下都认为malloc是隐式定义了元素数量是正确的吗?
解决方法
您在此处定义的数组中元素的数量:node (*test2)[1]
node (*test2)[1] = malloc(511 * sizeof(node));
首先,您不应该在malloc中仅使用对象类型
node (*test2)[1] = malloc(511 * sizeof(*test2));
此行分配N个内存字节,其中N为511 *(类型node
的单个元素数组占用的字节数)并将其分配给指针 {{1} }。 test2
是不是数组,并且没有您可以定义/声明的nay元素
所以在第一种情况下,我基本上是创建一个一维数组, 在第二个二维数组中。
要“创建”二维数组,您需要test2
,对于单维node arr2d[x][y]
。 数组不是指针和指针不是数组
顺便说一句,如果您忽略答案,写答案的重点是什么?
,它是隐式定义的,因为程序员需要了解使用该分配的结构时存在哪些限制。 malloc
本身与您所要求的大小无关。
还有calloc
,您可以指定多个元素和元素大小以使您的分配代码更容易理解和验证,但也不必关心分配后的内存如何处理。 / p>
您可以将malloc
的结果分配给所需的任何内容,但是应该将其分配给有意义的指针类型。
在C语言中,您可以做很多没有任何意义的事情,只是未定义的行为,所以请不要以为它会编译有效的代码。
请记住,C根本不执行任何边界检查。这完全是程序员的责任。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。