64,661
社区成员
发帖
与我相关
我的任务
分享
float **func();
float **func()
{
int m=10; //每次调用这个函数可能赋不同的值,10只是举一个例子
int n=10; //每次调用这个函数可能赋不同的值,10只是举一个例子
float **B;
B=new float *[m] ;
B[0] =new float [m*n] ;
for(int i = 1; i < m; i++)
{
B[i]=B[i-1]+n ;
}
//--------------对B进行一些操作--------------------
//------------------------------------
return B;
}
//在另一个程序中调用
void mainfunction()
{
float **A;
A=func();
delete []A;//在此处删除
}
float **func();
float **func(int m, int n)
{
float **B;
B=new float *[m] ;
if (B == NULL)
{
return NULL;
}
for(int i=0; i<m; i++)
{
B[i] = new float[n];
}
//--------------对B进行一些操作--------------------
//------------------------------------
return B;
}
//在另一个程序中调用
void mainfunction()
{
float **A;
A = func(10, 20);
for (int i=0; i<10; i++)
{
delete []A[i];
}
delete []A;//在此处删除
}
void func(float **B)
{
int m=10; //每次调用这个函数可能赋不同的值,10只是举一个例子
int n=10; //每次调用这个函数可能赋不同的值,10只是举一个例子
float **B;
B=new float *[m] ;
B[0] =new float [m*n] ;
for(int i = 1; i < m; i++)
{
B[i]=B[i-1]+n ;
}
//--------------对B进行一些操作--------------------
//------------------------------------
return B;
}
void mainfunction()
{
float **A;
func(A);
delete []A;//在此处删除
}
原因:func函数只是对局部的B进行了new操作,并没有对A进行实际的new。
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19