数组未正确返回

use*_*290 3 c++ arrays

我试图返回一个简单的数组,但我没有得到正确的结果.我得到以下内容

arr1[0] = 1 
arr1[1] = 32767
Run Code Online (Sandbox Code Playgroud)

结果应该是结果

  arr1[0] = 1 
  arr1[1] = 15
Run Code Online (Sandbox Code Playgroud)

请建议.

int *sum(int a, int b){
  int arr[2];
  int *a1;
  int result = a+b;
  arr[0]= 1;
  arr[1]= result;
  a1 = arr;
  return a1;
}
int main(){  

  int *arr1 =  sum(5,10);
  cout<<"arr1[0] = "<<arr1[0]<<endl;
  cout<<"arr1[1] = "<<arr1[1]<<endl;

  return 0;

}
Run Code Online (Sandbox Code Playgroud)

Unc*_*ens 16

你不能返回数组.你要返回的只是一个指向本地对象的指针,当函数返回时,它会在超出作用域时被销毁.

您可以传入指向数组的指针,因此该函数会修改该数组.

此外,如果数组包含在struct/class中,则可以返回数组的副本,例如std::tr1::array(或boost::array).


and*_*and 7

试试这个...


#include <vector>
#include <iostream>

std::vector<int> sum(int a, int b)
{ 
  std::vector<int> rv(2);
  rv[0]= 1; 
  rv[1]= a+b; 
  return rv; 
} 

int main()
{   
  std::vector<int> arr1 = sum(5,10); 
  std::cout << "arr1[0] = " << arr1[0] << std::endl; 
  std::cout << "arr1[1] = " << arr1[1] << std::endl; 

  return 0; 
} 

Run Code Online (Sandbox Code Playgroud)


N 1*_*1.1 5

a1是一个局部变量,在堆栈上分配内存.如果要返回int *,则应在堆上分配内存.

int *arr = (int *)malloc(sizeof(int) * 2));

//CAUTION you need to de-allocate memory [read about free()]
Run Code Online (Sandbox Code Playgroud)

说明:

arr只要函数int *sum(int, int)没有完成,see 实际上就是一个数组.那么,你返回的实际上是实际上的地址arr ,并且不再存在.

当您尝试访问内存位置时main(),您只需获取垃圾/随机值.

  • 请注意,调用者必须删除该数组,否则会出现新的内存泄漏. (3认同)

Geo*_*che 5

您正在返回一个指向局部变量的指针 - 当sum()返回到main()数组时不再存在.

你甚至不能按值返回数组,除非你包装它们,但你可以简单地返回一个标准容器,如:std::vector或者std::pair:

std::pair<int,int> f(int a, int b) {
    return std::make_pair(1, a+b);
}

int main() {
    std::pair<int,int> res = f(5,10);
    std::cout << res.first << ", " << res.second << std::endl;
}
Run Code Online (Sandbox Code Playgroud)