什么时候应该使用动态内存分配函数而不是直接变量声明?

use*_*486 0 c memory malloc dynamic-memory-allocation

下面是一个直接变量声明的例子。

double multiplyByTwo (double input) {
  double twice = input * 2.0;
  return twice;
}
Run Code Online (Sandbox Code Playgroud)

下面是一个动态内存分配的例子。

double *multiplyByTwo (double *input) {
  double *twice = malloc(sizeof(double));
  *twice = *input * 2.0;
  return twice;
}
Run Code Online (Sandbox Code Playgroud)

如果我有选择,我会一直使用直接变量声明,因为代码看起来更易读。什么时候动态内存分配更合适?

Sou*_*osh 5

什么时候动态内存分配更合适?

当编译时不知道分配大小时,我们需要使用动态内存分配。

除了上面的情况,还有一些其他的场景,比如

  1. 如果我们想要一个在运行时可重新调整大小的数据结构,我们需要进行动态内存分配。

  2. 动态分配的内存的生命周期保持有效,除非它是free()d。有时,当从函数调用中返回某个变量的地址时,它会派上用场,否则,对于auto变量,该地址将超出范围。

  3. 通常堆栈大小会受到适度限制。如果要创建和使用庞大的数组,最好使用动态内存分配。这将从堆中分配内存。