矩阵转置函数——指针自增的陷阱

#include"algorithm.h"int** transpose(int**po, int &m, int &n)
{int*p = (int*)malloc(m*n*sizeof(int));//转置矩阵空间int**pn = (int**)malloc(n*sizeof(int*));//转置矩阵数组指针//指针备份int *save = po[0];int *nSave = p;//布置转置矩阵// [1 2 3 4 5 6] --> [1 4 2 5 3 6]for (int j = 0; j < n; j++){for (int i = 0; i < m; i++){/*注意这里都有自增,指针的值变化了,就可能出现堆头错误!*/*p++ = *po[i];//按地址录入元素po[i] = po[i] + 1;//更新地址}}//还原指针指向堆头,坑!!!p = nSave;po[0] = save;//布置转置矩阵数组指针for (int j = 0; j < n; j++){pn[j] = &p[j*m];}//释放原矩阵空间free(po[0]);free(po);swap(m, n);return pn;
}int main()
{int m, n;scanf("%d%d", &m, &n);int**p = new_arr2(m, n);if (!p)return -1;scan_arr2(p, m, n);p = transpose(p, m, n);print_arr2(p, m, n);free(p[0]);free(p);return 0;
}

指针变化后不再指向原处,如果指针指向的是堆(malloc来的),则free时不注意就会导致堆头错误,上面有二级指针的话二级指针也无法正确解包拿到自增前的数据,比如这次实验就产生矩阵转置后全是杂乱值的情况,那是一级指针已经飘了,二级也遭殃了,所以要注意指针的变化是有潜在的陷阱的。


该程序改进方法是不要对传进的参数直接修改,而是新建临时指针变量用于处理,就像ps一般不直接对原图处理而是新建副本再处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

号称能自动编程60年,“进化计算”究竟进化到哪一步了?

大数据文摘出品来源&#xff1a;ponderwall编译&#xff1a;stats熊、钱天培大胆想象一下&#xff0c;如果计算机可以自行编写程序&#xff0c;这会为人类带来什么样的变化&#xff1f;与其辛苦研究计算机解决问题的方法论&#xff0c;敲出精准的代码&#xff0c;不如告诉计算机…

动态规划——数塔问题

从原点&#xff08;顶层&#xff09;出发&#xff0c;只能向左或者向右&#xff0c;找到一条路径使得路径上的数字和最大: #include<stdio.h> //#include"algorithm.h" #define N 100int max(int a, int b) {return a > b ? a : b; }int main() {int a[N…

http的get与post方式下的getParameter获取中文

客户端提交某个中文参数&#xff0c;比如a中国 &#xff08;1&#xff09;如果以GET方式提交&#xff0c;在地址栏中&#xff0c;可以看到参数进行了URL ENCODE&#xff0c;形如&#xff1a;a%E4%B8%AD%E5%9B%BD。服务端接收到请求&#xff0c;使用request.getParameter("…

PS填充、仿制图章和修补工具

右下角调整色调后&#xff1a; 概览&#xff1a; 用魔棒工具反选出天空的树枝&#xff0c;然后点 选择-修改-扩展 大致扣出枝丫&#xff0c;再 编辑-填充-内容识别 将空中的树枝ps掉。通过仿制图章工具&#xff08;勾选对齐&#xff09;可以将右下角楼p掉。也可以用修补工具&…

学界 |《nature》杂志:我们有义务搞懂我们所创造出来的技术

来源: AI科技评论一个跨学科的研究小组希望创建一个名为「机器行为」的新学科&#xff0c;以了解人工智能将如何对我们的社会、文化、经济与政治造成影响。在《自然》杂志的一篇评论文章中&#xff0c;作者认为人工智能算法的研究需要扩展到计算机科学以外的领域&#xff0c;纳…

渲染上下文Rendering Context

渲染描述表&#xff0c;包含一次渲染所需的全部数据。用于提交给游戏渲染引擎的渲染器进行渲染 -------------------------------------------------------------------- 如果把渲染引擎看做一个画家&#xff0c;那么画家开始作画之前需要做一系列的准备工作&#xff0c;譬如&a…

高数复习9.13 函数与极限

双曲正切函数图像 反双曲arsh和arch的表达式 arshxln(xx21)arsh xln(x\sqrt{x^21})arshxln(xx21​)   archxln(xx2−1)arch xln(x\sqrt{x^2-1})archxln(xx2−1​) 数列的极限&#xff1a;构造|xn-a|<一个能确定的数&#xff08;表达式&#xff09; 极限存在的证明&…

【深度】从GE工业互联网到中国工业互联网

来源&#xff1a;数字化企业工业互联网自2017年起已成为国内科技界最为火爆的词汇之一。学者、供应商、投资商、企业家、媒体、政府官员、人大代表、政协委员等纷纷给出了自己的解读。一、背景冠名为工业互联网的学术会议此起彼伏&#xff0c;有世界大会、世界峰会、全球峰会、…

LeetCode题——最长无重复子串

题目 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。如&#xff1a; 输入: “abcbabcd” 输出: 4 解释: 因为无重复字符的最长子串是 “abcd”&#xff0c;所以其长度为 4。 思路 一开始容易往暴力遍历的方向想&#xff0c;但是实际上运用窗口的…

透视世界人工智能发展

来源&#xff1a;参考消息、新华网摘要&#xff1a;当今世界&#xff0c;随着人工智能迎来新一轮发展热潮&#xff0c;一个“新智能时代”即将到来。世界大国都把加快发展人工智能上升至国家战略高度&#xff0c;以抢占新一轮科技革命和产业变革的制高点。“透视世界人工智能发…

[链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]

最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法&#xff08;单源最短路径&#xff09; http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html转载于:https://www.cnblogs.com/lyggqm/p/…

半导体行业必将再火十年!两大趋势成发展新动能

来源&#xff1a;智东西看点&#xff1a;汽车半导体和人工智能芯片为半导体市场带来了新的发展机遇。当前&#xff0c;我们使用的许多前沿数字化设备背后的技术都要依靠半导体才能实现。 由于无人驾驶、人工智能、5G和物联网等新兴技术的发展&#xff0c;以及对技术研发的持续投…

batch批处理程序easyadd——追加单行文本到指定txt文件末尾

介绍 有时候需要打开记事本在末尾追加文本&#xff0c;如果手动找到txt文件&#xff0c;再打开txt文件&#xff0c;按 ctrlhome 到达文末&#xff0c;才能完成对txt文件的追加&#xff0c;比较繁琐。而且如果txt文件很大&#xff08;比如词典文件&#xff09;&#xff0c;手动…

短信备份(原)

昨天在学习回调的时候&#xff0c;发现了其独特的魅力之处&#xff0c;它将业务代码逻辑和我们的工具类耦合性大大降低了。 应用场景&#xff1a;在实际开发中&#xff0c;经常会随着用户的需求的改变而对对话框的样式进行相应修改&#xff0c;在短信的备份过程中&#xff0c;往…

今年的谷歌I/O大会,或许会有这些东西

来源 | 网易科技据国外媒体报道&#xff0c;当地时间5月7日&#xff0c;2019年度谷歌I/O开发者大会将在加州的海岸线圆形剧场(Shoreline Amphitheater)举行。届时&#xff0c;包括谷歌首席执行官桑达尔皮查伊(Sundar Pichai)等公司高管将登台发表演讲。谷歌将在本届开发者大会上…

贪吃蛇C语言

有趣的小游戏&#xff0c;实现关键点有光标移动&#xff0c;按键检测&#xff0c;状态转移&#xff0c;随机数生成等。欢迎讨论&#xff01; #include<stdio.h> #include<windows.h> #include<time.h> #include<conio.h>#define UP w #define DOWN s…

WebClient 上传文件

MVC下 服务端代码&#xff1a; [HttpPost]public ActionResult UploadImg(string types){string data "";try{if (types "image"){foreach (string f in Request.Files.AllKeys){string pathT HttpRuntime.AppDomainAppPath.ToString() "/UpLoadI…

全球及美国首张无人机配送商业化“驾照”先后落地,国内还要多久?

来源&#xff1a;智能相对论&#xff08;aixdlun&#xff09;前不久&#xff0c;美国首张无人机配送“驾照”正式落地&#xff0c;获得者还是之前在澳大利亚拿下全球首张无人机商业飞行许可的谷歌。最早提出无人机配送的亚马逊被谷歌两次捷足先登&#xff0c;贝佐斯心里一定不好…

stringBuffer的使用及字符串比较的区别

/* * 关于equals()和: 对于String简单来说就是比较两字符串的Unicode序列是否相当&#xff0c;如果相等返回true; * 而是比较两字符串的地址是否相同&#xff0c;也就是是否是同一个字符串的引用。 * * 为了高效的修改字符串Java引入了StringBuffer。 */public class test { p…

IBM的医疗AI为何失败

来源&#xff1a;陆志方科学网博客最近&#xff0c;看到一篇关于医疗AI的文章《IBM医疗AI宣告失败&#xff0c;率先入局却踏步不前》。1997年IBM深蓝战胜国际象棋世界冠军卡斯帕罗夫&#xff0c;名声大噪&#xff1b;2011年开始&#xff0c;IBM在医疗AI押上重注&#xff0c;此后…