现在想申请一个 h × w 的二维矩阵,用二重指针来表示,申请的代码有两种,如下:
代码1:
float allocf(int h, int w) {
float **p = (float)malloc(sizeof(float) * h);
if (!p) {
cerr << "Memory Allocation Error!" << endl;
exit(1);
}
for (int i = 0; i < h; ++i) {
p[i] = (float)malloc(sizeof(float) * w);
if (!p[i]) {
cerr << "Memory Allocation Error!" << endl;
exit(1);
}
}
return p;
}
代码2:
int alloci(int h, int w) {
int a = (int)malloc(h * w * sizeof(int));
if (!a) {
cout << "allocu fail." << endl;
exit(0);
}
int **p = (int)malloc(h * sizeof(int*));
for (int i = 0; i < h; ++i) {
p[i] = &a[i * w];
}
return p;
}
不要在意类型不同,仅仅是示意~~
显然,释放空间的代码也不同:第一种分配方法需要写一个循环来释放空间,而第二种只需要两条 free 语句即可。
那么问题来了,这两种方法哪种比较安全?至于效率上的差距,我想很显然第二种的效率比第一种要好。