-1 c++
我想通过指向main函数的指针返回在本地函数中创建的数组.我的代码如下.返回数组,我只能按元素访问每个元素.下次它给出垃圾值.怎么了?
void DoWork(int** ppOut , int& nSize)
{
int m[5];
for(int i = 0 ; i < 5 ; i++)
{
m[i] = i;
}
nSize = 5;
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;
cout << m[3] << endl;
cout << m[4] << endl;
*ppOut = &m[0];
//delete [] m;
}
void main()
{
int nSize = -1;
int i;
int* f = NULL;
DoWork(&f , nSize);
cout << f[3] << endl;
cout << f[0] << endl;
cout << f[2] << endl;
cout << f[3] << endl;
cout << f[4] << endl;
_getch();
}
Run Code Online (Sandbox Code Playgroud)
输出为: - 0 1 2 3 4来自本地功能.但在主要3和其余是草本值
问题:
数组m是一个本地数组,在函数的生命周期之外不存在DoWork().当你这样做时,你最终得到的是未定义的行为,这基本上意味着你可以看到任何可观察的行为,因为该程序不再是一个C++标准批准的程序,因此它可以显示(字面上)任何行为.
解决方案:
您需要延长生命周期,m以便即使在函数返回后它仍然有效.有很多方法可以做到这一点:
每个人都有自己的优点和缺点,更多的是马匹的课程.
另一方面,void main()它不是标准的指定原型,main()它应该返回int:
int main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |