我有上面的错误,我会尽量清楚。
简短说明:
我定义了一个新的结构: kid ,我想在内存中为一个类型为kid的新数组分配空间。 所以我正在做malloc(通过我的检查 - >没有失败)并试图写入其中一个字段,如果数组,但我得到标题中的错误。 我不明白为什么我不能写这些字段,即使我做了动态分配。
包含评论的代码:
我定义了一个名为kid的结构如下:
typedef struct
{
char name[16];
candy *kid_candy;
} kid;
(糖果是我定义的另一个结构,我不需要它复制他的定义)
上面的定义写在下面代码中包含的h文件中。
#include "kindergarten.h"
void AllocateKidsArray(int size);
int main()
{
AllocateKidsArray(3);
}
void AllocateKidsArray(int size){
kid *p_kids_arr = NULL;
int i ;
char blank[16] = {' '};
//In the next line want to allocate space for an array,that his type is kid:
p_kids_arr = (kid*)malloc(size * sizeof(kid));
// checking if allocation failed
if (p_kids_arr == NULL)
{
return -1;
}
else
{
for (i = 0; i < size; i++)
{
//now im trying to change a field in the array I allocated before:
(p_kids_arr + sizeof(kid)*i)->kid_candy = NULL;
//but I always get the error from the title
}
}
}
要点:
当我在网上寻找一个解决方案时,大多数有这个错误的人,因为他们声明了一个指针,然后尝试写入它们。 但在我的情况下,我在哪里做malloc,我只是无法弄清楚问题是什么,这是令人不安的,因为它看起来像是一些基本的东西。
对我来说理解错过的是什么以及我做错了什么非常重要,我不想要任何代码修复,我想要的是理解为什么我无法写入动态分配的字段,这就是我需要你的原因帮助
谢谢!
答案 0 :(得分:1)
为什么不替换这个
(p_kids_arr + sizeof(kid)*i)->kid_candy = NULL;
用这个:
p_kids_arr[i].kid_candy = NULL;
上述两个不一样。因为如果我实际上由于指针运算而将{1}的类型添加到int
的指针,你将向它添加4个字节(如果int指针的大小是4个字节)(所以我认为第一个版本会增加更多的字节到{ {1}}超过需要。)
同样如评论中所述,您似乎缺少p_kids_arr
并且您应该收到警告,因为您在返回类型为#include <stdlib.h>
的函数中执行了return -1;
。