【发布时间】:2018-02-27 17:12:07
【问题描述】:
我有一个被多次调用的函数,其参数n 定义了n*2 大小的二维数组:
void myfunc(int n){
static int n0=0,i;
static double **x=NULL;
if(n>n0){ //realloc if n grows
x=(double **)realloc(x,n*sizeof(double*)));
for(i=0;i<n;i++){
x[i]=(double *)realloc(x[i],2*sizeof(double))); // <--problem here
}
n0=n;
}
}
在第一次调用时,**x 被初始化为 NULL,但 x[i] 不是,因此第二个 realloc 的行为可能不正确。
有没有办法在不首先使用malloc 或calloc 的情况下realloc 空二维矩阵的行?
【问题讨论】:
-
指向指针的指针不是二维数组。
-
在 C++ 中?不是这样的!请选择一种语言,C和C++是两种非常不同的语言,没有理智的C++程序员会做这样的事情。
-
至于你的问题,你确实知道函数是否第一次被调用。想想你将
x初始化为... -
不同之处在于二维数组是一个具有固定维度的连续内存区域。在您的情况下,它指向不同的区域,并且每个“行”可能有不同数量的“列”。
-
在这种情况下,没有。
realloc只重新分配内存,它不会初始化内存中未初始化的部分。