外贸seo站百度做网站推广电话
web/
2025/9/26 13:20:44/
文章来源:
外贸seo站,百度做网站推广电话,云商城官网,推广的目的是什么关于二重指针释放的问题使用 malloc 来申请内存#xff0c;申请的代码部分如下#xff1a;float *fp (float*)malloc(sizeof(float)* h * w);float **cost (float**)malloc(sizeof(float*)* h);for (int i 0; i cost[i] fp[i * w];}那我释放的时候应该如何释放呢申请的代码部分如下float *fp (float*)malloc(sizeof(float)* h * w);float **cost (float**)malloc(sizeof(float*)* h);for (int i 0; i cost[i] fp[i * w];}那我释放的时候应该如何释放呢我现在采用的办法是for (int i 0; i free(cost[i]);cost[i] NULL;}free(fp);显然这个代码在循环的时候就报错了……所以想请教一下大家正确的姿势。------解决思路----------------------有几次malloc就使用几次free而且二者的地址必须相同malloc分配的内存是有簿记的只能在分配的地址上释放否则没法找到大小信息(free用来释放)所以不能够“free(cost[i]);”而只能free(fp);(或者等价的cost[0])------解决思路----------------------free (fp);free (cost);或者free (*cost);free (cost);也就是free的次数必须和malloc的次数相同。虽然你分配内存时在for循环中的行为很奇怪(通常二重指针不是这么申请内存的)。------解决思路----------------------仅供参考#include #include #include int **newarr2d(int rows,int cols) {int **p,i;p(int **)malloc(rows*sizeof(int *));if (NULLp) exit(1);for (i0;ip[i](int *)malloc(cols*sizeof(int));if (NULLp[i]) exit(1);}return p;}void deletearr2d(int **p,int rows) {int i;for (i0;ifree(p[i]);}free(p);}int main() {int **arr2d,i,j,r,c;r4;c5;//在堆中开辟一个4×5的二维int数组arr2dnewarr2d(r,c);for (i0;ifor (j0;jarr2d[i][j]i*cj;}}for (i0;ifor (j0;jprintf( %2d,arr2d[i][j]);}printf(\n);}deletearr2d(arr2d,r);r6;c3;//在堆中开辟一个6×3的二维int数组arr2dnewarr2d(r,c);for (i0;ifor (j0;jarr2d[i][j]i*cj;}}for (i0;ifor (j0;jprintf( %2d,arr2d[i][j]);}printf(\n);}deletearr2d(arr2d,r);return 0;}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19// 0 1 2// 3 4 5// 6 7 8// 9 10 11// 12 13 14// 15 16 17//
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81536.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!