- 52
- 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
void printarr(int m,int n,int arr[n][n])
{
for(int i= 0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%5d ",arr[i][j]);
}
printf("\n");
}
printf("\n");
}
void clearzero(int m,int n,int (*str)[n])
{
/*定义两个一维数组标识保存该行/列是否有零*/
bool *row = (bool *)malloc(m * sizeof(bool));
bool *col = (bool *)malloc(n * sizeof(bool));
/*初始化*/
/*添加memset与否决定程序运行是否正确*/
memset(row, 0x0, m);
memset(col, 0x0, n);
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(str[i][j] == 0)
{
row[i] = true;
col[j] = true;
}
}
}
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
/*当前元素所在行/列为0,置元素为0*/
if(row[i] || col[j])
{
str[i][j] = 0;
}
}
}
free(row);
row = NULL;
free(col);
col = NULL;
}
int main(int argc, const char * argv[])
{
int str[3][3] = {{1,2,3},{0,1,2},{0,0,1}};
clearzero(3,3,str);
printarr(3,3,str);
int cool[5][3] = {{1,2,3},{1,1,2},{0,2,1},{1,2,0},{2,3,4}};
clearzero(5,3,cool);
printarr(5,3,cool);
return 0;
}
上面代码中我申请了两个bool类型的数组,释放的话怎么释放呢?
我直接在最后free(row) row = NULL; free(col) col = NULL;程序结果与预期不符,这是为什么呢?
这块内存到底该怎么释放呢?难道我要一个一个的遍历这两个数组,然后去释放?
如果不添加如下两行,程序运行结果错误:
memset(row, 0x0, m);
memset(col, 0x0, n);
这究竟是为什么呢?
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

