首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

返回值类型为指针的 函数,

2012-04-06 
返回值类型为指针的 函数,求助大虾!#include stdio.hint *no_order_sort(int a[],int len){........int

返回值类型为指针的 函数,求助大虾!
#include <stdio.h>
 int *no_order_sort(int a[],int len)
{
  ........
  int *q;
b[0]=max; //max=10,min=1
b[1]=min; //为了能将max和min 中的数值都返回,定义了数组b和 指针 q
q=b;  
return q;

}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
p=no_order_sort(a,10);
printf("最大值是%d\n",*p);  
printf("最小值是%d\n",*(p+1)); //按常理来说,*(p+1)不是应该 等于 1 吗,可是最后的结果。。。
  return 0;
}


大侠救助~ 程序是在 visual studio 2008中运行的

[解决办法]
参考:
关于函数返回值的几种情况

包你触类旁通。
[解决办法]
int *b = new int[2]; //具体看1楼的连接
[解决办法]
return q 成功返回后 q指向的内存就要被回收了 可以用动态分配 就像二楼说的int *b = new int[2]
[解决办法]
如果b数组定义在被调用函数内部是要出问题的,应该定义为全局变量才可以!!!!
[解决办法]
你的数组是在被调用函数的栈上申请的,在函数调用结束后栈上的空间是被系统自动释放的。建议你使用malloc申请两个int类型的空间,分别用于存放max 和 min。这样你返回p指针后,就可以保留放入的值了。因为malloc申请的空间是在堆上的,堆上的空间除非你手动释放,不然只有等程序运行结束后才会有系统释放。
[解决办法]
q=b;
return q;
函数调用结束后q指向的内容已不存在了
[解决办法]
返回局部指针是很危险的,会导致不可预知的错误,内存错误,段错误等等,no_order_sort函数中,q是局部指针,函数结束之后就自动释放了。

热点排行