我已经声明了这个变量:
float (**explosions)[4];
这将指向一个指向内存块的指针的内存块,用于具有4个浮点数的浮点数组。
当制作指向浮点数组内存块的指针的内存块时,我在这里放置什么。我应该使用void指针吗?那将是一个选择,但不是一个好选择。
explosions = realloc(explosions,sizeof(What goes here? It will be the size of a pointer to an array of 4 floats) * explosion_number);
为数组创建内存块时,我猜这个好不好?
explosions[explosion_number] = malloc(sizeof(float) * 64);
这是使用4个元素制作16个浮点数组。我需要在内存中包含16个这样的数组的原因是我可以删除冗余内存,因此我可以将指向这些数组的指针设为NULL,这样我知道数据在冗余后被释放,不再需要处理。万一你想知道。
感谢您的帮助。
答案 0 :(得分:4)
sizeof
可以使用括号内的类型或表达式。执行sizeof <expression>
时,表达式仅检查其类型,但不进行计算,因此解除引用空指针等问题就没有问题。
这意味着您可以像这样编写realloc
和malloc
来电:
explosions = realloc(explosions, sizeof(*explosions) * explosion_number);
explosions[explosion_number-1] = malloc(16 * sizeof(**explosions));
// -1 because explosions array runs from 0 to (explosion_number-1)