Fre*_*le4 -1 c malloc pointers
我有两个简单的结构,在我的主要创建中:
struct Car *myCar[200]
struct Car *otherCar[200]
Run Code Online (Sandbox Code Playgroud)
当我第一次尝试初始化它们时,我试过:
for (int i = 0; i < 200; i++){
myCar[i] = malloc(sizeof(struct Car*));
otherCar[i] = malloc(sizeof(struct Car*))
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.但如果我将它们拆分成单独的循环,如:
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*))
}
Run Code Online (Sandbox Code Playgroud)
有用.有人可以向我解释为什么它在每个例子中都不起作用吗?
如果目标指针具有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]);
}
Run Code Online (Sandbox Code Playgroud)
即只是*在收件人指针前面添加一个并使用它sizeof.这样您就不必计算*并担心要使用的特定类型sizeof.