关于C++指针的一道作业题!
小弟最近刚接触C++,有些问题弄不懂。。。这是一道作业题:int*getPtrToArray(int&m){intanArray[5]={5,4,3,2,1};m=5;r...
小弟最近刚接触C++,有些问题弄不懂。。。这是一道作业题:
int* getPtrToArray(int& m)
{
int anArray[5] = { 5, 4, 3, 2, 1 };
m = 5;
return anArray;
}
void f()
{
int junk[100];
for (int k = 0; k < 100; k++)
junk[k] = 123400000 + k;
}
int main()
{
int n;
int* ptr = getPtrToArray(n);
f();
for (int i = 0; i < n; i++)
cout << ptr[i] << ' ';
cout << endl;
}
以上程序原本意图是输出5 4 3 2 1,但是实际运行中无法得到满意的结果。请问程序的问题在哪里?如果改进的话该用什么样的方案?
感谢各位高人!!!!!! 展开
int* getPtrToArray(int& m)
{
int anArray[5] = { 5, 4, 3, 2, 1 };
m = 5;
return anArray;
}
void f()
{
int junk[100];
for (int k = 0; k < 100; k++)
junk[k] = 123400000 + k;
}
int main()
{
int n;
int* ptr = getPtrToArray(n);
f();
for (int i = 0; i < n; i++)
cout << ptr[i] << ' ';
cout << endl;
}
以上程序原本意图是输出5 4 3 2 1,但是实际运行中无法得到满意的结果。请问程序的问题在哪里?如果改进的话该用什么样的方案?
感谢各位高人!!!!!! 展开
展开全部
anArray 是局部变量,当调用函数getPtrToArray之后,该变量所占内存会被收回,重新使用,返回的只是这个数组的头指针,指针所指向的内存很有可能被再次使用。
改进方法:
int* getPtrToArray(int& m)
{
anArray = new int[5];
m = 5;
for (int i=0; i<m; i++)
{
anArray[i] = m-i;
}
return anArray;
}
在main函数里面记得del ptr 就行了
改进方法:
int* getPtrToArray(int& m)
{
anArray = new int[5];
m = 5;
for (int i=0; i<m; i++)
{
anArray[i] = m-i;
}
return anArray;
}
在main函数里面记得del ptr 就行了
追问
谢谢!那如果这样做的话同样没有全局变量呀,这个函数调用完毕后内存不会被收回吗?
展开全部
把
int anArray[5] = { 5, 4, 3, 2, 1 };
提到最外面,作为全局变量。本题是告诉你不要在局部变量的作用域外使用它,否则后果无法预料。
int anArray[5] = { 5, 4, 3, 2, 1 };
提到最外面,作为全局变量。本题是告诉你不要在局部变量的作用域外使用它,否则后果无法预料。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
getPtrToArray 子函数中申明的anArray在函数结束后它的生命周期也没了,此时anArray已经不存在了,所以你返回它的指针也无效了 ,所以……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int* getPtrToArray(int& m)
{
m = 5;
int *anArray = new int[m]; //通过new关键字分配的内存是自己管理的 须要delete才会被回收。
for(int i = 0; i != m; ++i)
{
anArray[i] = m-i;
}
return anArray;
}
{
m = 5;
int *anArray = new int[m]; //通过new关键字分配的内存是自己管理的 须要delete才会被回收。
for(int i = 0; i != m; ++i)
{
anArray[i] = m-i;
}
return anArray;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询