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