C-在同一循环中的malloc



我有两个简单的结构,我在我的主体中创建:

struct Car *myCar[200]
struct Car *otherCar[200]

当我第一次尝试初始化它们时,我尝试了:

for (int i = 0; i < 200; i++){
    myCar[i] = malloc(sizeof(struct Car*));
    otherCar[i] = malloc(sizeof(struct Car*))
}

不起作用。但是,如果我将它们分为单独的循环,例如:

for (int i = 0; i < 200; i++){
      myCar[i] = malloc(sizeof(struct Car*));  
}
for (int x = 0; x < 200; x++){
    otherCar[x] = malloc(sizeof(struct Car*))
}

它有效。有人可以向我解释为什么它在每个示例中都没有/可以工作?

如果目标指针具有struct Car *类型,则最有可能每个调用malloc都应该为单个struct Car对象分配足够的内存。这意味着您分配的每个内存块的大小应为 sizeof(struct Car),而不是代码中的 sizeof(struct Car *)

您的两个变体都存在此问题,这意味着,如果第二个"工作",那是纯粹的事故。

通常,一个好主意是坚持以下成语

for (int i = 0; i < 200; i++){
    myCar[i] = malloc(sizeof *myCar[i]);
    otherCar[i] = malloc(sizeof *otherCar[i]);
}

即。只需在收件人指针的前面添加一个*,然后在sizeof中使用它。这样,您就不必计算* s并担心在sizeof下使用的特定类型。

sizeof(struct Car*)

此语句是指指针4或8的大小,具体取决于系统,因此,如果工作正常,则在第二个选项中,这是纯粹的m/c运气。

您需要在两个变体中使用B3low更改它

sizeof(struct Car);

相关内容

  • 没有找到相关文章

最新更新