我上面有错误,我会尽力清除。

简短说明:

我正在定义一个新结构:kid,我想在内存中为新类型的kid数组分配空间。
所以我正在做malloc(通过我的检查->没有失败),并尝试写入数组中的字段之一,但是标题中出现错误。
我不理解为什么即使在进行动态分配的情况下也无法在这些字段中进行编写。

带有注释的代码:

我定义了一个名为kid的结构,如下所示:

 typedef struct
 {
     char name[16];
     candy *kid_candy;
 } kid;


(candy是我定义的另一个结构,我不需要复制他的定义)

上面的定义写在下面的代码中包含的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的时候,我只是想不出问题出在哪里,而且令人不安,因为它看起来很基础。

对于我来说,了解我缺少的是什么,我做错了什么,对我不想要任何代码修复,我想要做的只是了解为什么我不能写动态分配的字段,这就是我为什么需要我的帮助,这一点非常重要。

谢谢!

最佳答案

为什么不替换这个

      (p_kids_arr + sizeof(kid)*i)->kid_candy = NULL;


有了这个:

      p_kids_arr[i].kid_candy = NULL;


上面的两个不一样。因为如果实际上我由于指针算术向类型int的指针加1,则将向其中添加4个字节(如果int指针的大小为4个字节)(因此我认为第一个版本会向p_kids_arr添加更多字节超出所需。)

另外,正如评论中指出的那样,您似乎缺少了#include <stdlib.h>

并且您应该已经收到警告,因为您正在使用具有返回类型return -1;的函数执行void

10-04 21:58