1

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

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

不小心忘记把numberOfDesiredElements*size放在前面了。它弄乱了我的程序抛出随机分段错误,即有时程序输出正确,有时它出现分段错误。

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

谢谢!

4

2 回答 2

5

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

于 2012-04-15T09:07:02.623 回答
3

更好的写作方式是

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

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

至于当您分配的空间少于您的预期时会发生什么,那么您超出了定义的行为范围。如果你破坏了一些重要的东西,你会得到一个运行时错误。如果您不这样做,您的代码似乎可以正常工作。

于 2012-04-15T13:53:44.253 回答