如何通过参数从my_func返回值?应用程序在printf期间崩溃。我不知道为什么,我认为* abc将指向xxx ......
void my_func(int *_return)
{
int *xxx = new int[5];
for (int i = 0; i < 5; i++) xxx[i] = 100+i;
_return = xxx;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
int *abc = NULL;
my_func(abc);
printf("%d", abc[2]);
return 0;
}
答案 0 :(得分:1)
for (int i = 0; i <= 5; i++) xxx[i] = 100+i; <<<< i < 5
索引是4,因为5将超出界限。
要使其生效,您应该传递指针的地址: -
my_func(&abc);
void my_func(int**_return)
答案 1 :(得分:1)
有两种方法。第一个是使用参考。例如
void my_func(int * &a)
{
a = new int[5];
for (int i = 0; i < 5; i++) a[i] = 100+i;
}
并且函数被调用为
my_func( abc );
第二个是使用指针指针。例如
void my_func(int **a)
{
*a = new int[5];
for (int i = 0; i < 5; i++) ( *a )[i] = 100+i;
}
并且函数被调用为
my_func( &abc );
在这两种情况下你都应该打电话
delete [] abc;
当不再需要数组时。
当然,您可以使用std::vector
代替数组
void my_func( std::vector<int> &v )
{
v.reserve( 5 );
for (int i = 0; i < 5; i++) v.push_back( 100+i );
}
并且可以像
一样调用该函数std::vector<int> abc;
my_func( abc );
答案 2 :(得分:0)
您有未定义的行为
for (int i = 0; i <= 5; i++)
长度为5的数组的唯一有效索引是[0]
到[4]
,将终止条件更改为
for (int i = 0; i < 5; i++)