现在想申请一个 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 语句即可。
那么问题来了,这两种方法哪种比较安全?至于效率上的差距,我想很显然第二种的效率比第一种要好。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.