一、你这个代码其实是有内存泄漏的
下面这种“遇到失败就返回”的模式称为early return。
if (xxx == NULL) {
return;
}
在每个early return之前,是需要释放掉前面所分配的任何内存(或者资源)的。
Mat_tra()里的第二个early return以及更后面的return,没有释放掉前面那个calloc()分配的内存。
另外就是整个代码里没有free()语句
实际上,我推荐直接学C++,而不是C,这些资源问题C++里用RAII都轻松搞定。当然,最重要的是要有资源的分配、释放要配对的意识。但用C是很容易在early return时漏写资源释放语句的。
二、
Mat_tra()这种简写命名,不推荐。因为过一阵你自己可能也未必能记住是什么的简写了,更别说别人了
三、学会使用clang-format格式化代码。顺带看一下clang-format里google style、llvm style里的变量和函数是怎么的命名风格,不要使用很多纯大写的变量名字。
【 在 sqsl 的大作中提到: 】
: 我写了一段计算矩阵的转置矩阵的程序,运行虽然没有报错,但是我觉得我程序里是不是有两个错误?
: (1)验证了if( AT == NULL )之后,没必要再验证if( AT[i] == NULL )吧?属于多此一举;
: (2)定义**XT后缺少生成2行5列的全零矩阵的步骤。程序这次虽然没有出错,但容易出现内存地址被占用的情况?
: ...................
--
修改:z16166 FROM 221.218.160.*
FROM 221.218.160.*