我知道为了malloc
一个指向数组的指针数组,语法应为:
(int**)malloc(numberOfDesiredElements*sizeof(int*))
无意中,我忘了把numberOfDesiredElements*
放在前面。它弄乱了我的程序抛出随机分段错误,即有时程序正确输出,有时它会出现故障。
当我没有说明我想要多少个插槽时,有人可以解释发生了什么吗?
谢谢!
答案 0 :(得分:4)
这只是一个普通的乘法,而不是魔法语法;所以它为1而不是3分配了空间。
答案 1 :(得分:3)
更好的写作方式是
int **p = malloc(numberOfDesiredElements * sizeof *p);
更清洁,更易于阅读,您无需担心在sizeof
表达式中保持您的类型。转换是不必要的(在C中;它在C ++中是必需的,但您不应该在C ++中使用malloc
),并且如果您没有malloc
的原型,则可以禁止有用的诊断范围。
至于你分配的空间少于预期时发生的事情,那么你超越了定义行为的范围。如果你破坏了重要的东西,你就会遇到运行时错误。如果没有,您的代码将显示以正常工作。