C ++将动态数组元素传递给函数

时间:2013-08-10 08:58:00

标签: c++ arrays function dynamic arguments

代码如下所示:

void fUnc(float b){
  //does nothing  
}

float* fInit(void){
  float result[3];
  result[0] = 1.0;
  result[1] = 1.0;
  result[2] = 1.0;

  return result;
}

int main(){
  float* a = new float[3];
  a = fInit();
  fUnc(a[0]);
  printf("%f, %f, %f", a[0], a[1], a[2]);

  return 0;
}

数组元素的值为-107374176.000000。如果fUnc(a [0])[什么都不做]被注释掉,一切都很好。有什么问题?

编辑:稍微编辑一下代码以便您更好地理解

1 个答案:

答案 0 :(得分:1)

您不能返回这样的原始数组。你的fInit()做的是返回函数返回后失效的一些本地内存的地址。

您的a在某种意义上指向fInit()内的记忆,但不再有效。任何读取元素a[n]的尝试都会导致未定义的行为。

您应该使用其中一个标准容器,例如如果在运行时确定数组的大小,则为std::vector;如果在编译时知道大小,则为std::array。如果您需要链式列表,请使用std::list,依此类推。

所有标准容器都是可复制的(因此可以回收)。

请参阅http://en.cppreference.com/w/cpp/container

而且,绝对是书签 http://en.cppreference.com/w/。每当你想要自己写algorithm,或者发现自己正在调用new时,请查看参考文献。并get good books