很多情况下,需要在函数体中对输入参数进行动态分配内存,
示例如下:
void fun(int *a)
{
a=new int [10];
for (int i=0;i<10;i++)
{
a[i]=i;
}
}
但是在函数体外试图访问 a时,却发生内存访问错误,这是因为:编译器在fun()函数中,复制了a 指针(假设为_a),new int [10]也只是为_a 分配了内存,与a无关;在函数结束时,_a的空间被释放,对a 指针没有任何影响。
[如果函数的参数是一个指针,不要指望用该指针去申请动态内存] (林锐《高质量C/C++编程指南》)
如果你使用的是C++语言,可以考虑采用vector 来解决此类问题,代码如下:
void fun(vector<int> &a)
{
a.resize(10);
for (int i=0;i<10;i++)
{
a[i]=i;
}
}
这样,在函数执行完毕后,就可以访问a在fun()中分配的元素了。
(C语言的解决办法还没找到,欢迎讨论)