(INT **)的malloc(的sizeof(INT *))

时间:2012-04-15 09:05:51

标签: c malloc double-pointer

我知道为了malloc一个指向数组的指针数组,语法应为:

(int**)malloc(numberOfDesiredElements*sizeof(int*))

无意中,我忘了把numberOfDesiredElements*放在前面。它弄乱了我的程序抛出随机分段错误,即有时程序正确输出,有时它会出现故障。

当我没有说明我想要多少个插槽时,有人可以解释发生了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

这只是一个普通的乘法,而不是魔法语法;所以它为1而不是3分配了空间。

答案 1 :(得分:3)

更好的写作方式是

int **p = malloc(numberOfDesiredElements * sizeof *p);

更清洁,更易于阅读,您无需担心在sizeof表达式中保持您的类型。转换是不必要的(在C中;它在C ++中是必需的,但您不应该在C ++中使用malloc),并且如果您没有malloc的原型,则可以禁止有用的诊断范围。

至于你分配的空间少于预期时发生的事情,那么你超越了定义行为的范围。如果你破坏了重要的东西,你就会遇到运行时错误。如果没有,您的代码将显示以正常工作。