读书人

c++ 在函数中动态分配内存储器的数组能

发布时间: 2013-06-25 23:45:41 作者: rapoo

c++ 在函数中动态分配内存的数组能返回吗?
学习c++遇到问题了,请大神赐教!!


#include<iostream>
#include<iomanip>
using namespace std;
int m=2;
int n=3;

int **Fnc1();
int **Fnc2();
void Sum(int **(*)(),int **(*)(),int **);

int main(){
int i,j;
// pmc's dynamic memory allocation
int **pmc=new int *[m];
for(i=0;i < m;i++)
pmc[i]=new int[n];
Sum(Fnc1,Fnc2,pmc);
for(i=0;i < m;i++){
for(j=0;j < n;j++){
cout<<setw(5) << pmc[i][j];
}
}
for(i=0;i < m;i++)
delete pmc[i];
delete pmc;
return 0;
}

int **Fnc1(){
int i,j;
int **pma=new int *[m];
for(i=0;i < m;i++)
pma[i]=new int[n];
pma[0][0]=1;
for(i=0;i < m;i++){
for(j=0;j < n; j++){
pma[i][j] +=1;
}
}
return pma;
}
int **Fnc2(){
int i,j;
int **pmb=new int *[m];
for(i=0;i < m;i++)
pmb[i]=new int[n];
pmb[0][0]=2;
for(i=0;i < m;i++){
for(j=0;j < n; j++){
pmb[i][j] +=2;
}
}
return pmb;
cout<< "test";
}

void Sum(int **(*f1)(),int **(*f2)(),int **A){
int **p1=f1();
int **p2=f2();
int i,j;
for(i=0;i < m;i++){
for(j=0;j < n;j++){
A[i][j]=p1[i][j]+p2[i][j];
}
}
}
[解决办法]
pmb[i]=new int[n];这个pmb[i]里面的指针解引用后都是随机值,pmb[i][j] +=2;这种赋值没有意义。
[解决办法]


#include <iostream>
#include <vector>
#include<iomanip>
using namespace std;
vector<int> vec;
int m=2;
int n=3;

int **Fnc1();
int **Fnc2();
void Sum(int **(*)(),int **(*)(),int **);

int main(){
int i,j;
// pmc's dynamic memory allocation
int **pmc=new int *[m];
for(i=0;i < m;i++)
pmc[i]=new int[n];
Sum(Fnc1,Fnc2,pmc);
for(i=0;i < m;i++){
for(j=0;j < n;j++){
cout<<setw(5) << pmc[i][j];
}
}
for(i=0;i < m;i++)
delete [] pmc[i];//delete数组。。要加[]。。
delete [] pmc;
return 0;
}

int **Fnc1(){
int i,j;
int **pma=new int *[m];
for(i=0;i < m;i++)
pma[i]=new int[n];
pma[0][0]=1;
for(i=0;i < m;i++){
for(j=0;j < n; j++){
pma[i][j] =1;//pma中的值初始是随机的。。不能+=。。像这样直接赋值结果就没问题了。。
}
}
return pma;
}
int **Fnc2(){
int i,j;
int **pmb=new int *[m];
for(i=0;i < m;i++)
pmb[i]=new int[n];


pmb[0][0]=2;
for(i=0;i < m;i++){
for(j=0;j < n; j++){
pmb[i][j] =2;//
}
}
return pmb;
}

void Sum(int **(*f1)(),int **(*f2)(),int **A){
int **p1=f1();
int **p2=f2();
int i,j;
for(i=0;i < m;i++){
for(j=0;j < n;j++){
A[i][j]=p1[i][j]+p2[i][j];
}
}
//这里应该要释放p1,p2所指向的内存。。
}

读书人网 >C++

热点推荐