news 2026/5/30 15:15:08

复制字符串而不是直接赋值指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
复制字符串而不是直接赋值指针

复制字符串而不是直接赋值指针

(LeetCode:2418.按身高排序)

1.why?

  • 数据独立性:
    复制字符串使返回结果与输入数据完全独立
    修改返回数组中的字符串不会意外影响原始数据(可移植性)
    原始数据被释放后,返回结果仍然有效

  • 内存安全:

    • 避免悬垂指针问题(如果原始数组被释放)
    • 符合"caller负责free"的接口约定(返回完全独立的内存块)

2.示例:

(1)直接复制指针:

/** * Note: The returned array must be malloced, assume caller calls free(). */#defineunlikely(x)__builtin_expect(!!(x),0)intcmp(constvoid*a,constvoid*b){int*rwna=(*(int**)a);int*rwnb=(*(int**)b);returnrwnb[0]-rwna[0];//降序排列}char**sortPeople(char**names,intnamesSize,int*heights,intheightsSize,int*returnSize){*returnSize=0;//分配空间来存储,第一个储存升高,第二个存储下标int**ret=(int**)malloc(sizeof(int*)*heightsSize);if(unlikely(!ret)){returnNULL;}for(inti=0;i<heightsSize;i++){ret[i]=(int*)malloc(sizeof(int)*2);if(unlikely(!ret[i])){for(intk=0;k<=(*returnSize);k++){free(ret[k]);}free(ret);returnNULL;}ret[i][0]=heights[i];ret[i][1]=i;(*returnSize)++;}//二维数组排序qsort(ret,heightsSize,sizeof(int*),cmp);char**ans=(char**)malloc(sizeof(char*)*heightsSize);if(unlikely(!ans)){returnNULL;}for(inti=0;i<heightsSize;i++){ans[i]=(char*)malloc(sizeof(char)*namesSize);ans[i]=names[ret[i][1]];}// 释放临时数组for(inti=0;i<heightsSize;i++){free(ret[i]);}free(ret);returnans;}

(2)运用strcpy函数:

/** * Note: The returned array must be malloced, assume caller calls free(). */#defineunlikely(x)__builtin_expect(!!(x),0)intcmp(constvoid*a,constvoid*b){int*rwna=(*(int**)a);int*rwnb=(*(int**)b);returnrwnb[0]-rwna[0];//降序排列}char**sortPeople(char**names,intnamesSize,int*heights,intheightsSize,int*returnSize){*returnSize=0;//分配空间来存储,第一个储存升高,第二个存储下标int**ret=(int**)malloc(sizeof(int*)*heightsSize);if(unlikely(!ret)){returnNULL;}for(inti=0;i<heightsSize;i++){ret[i]=(int*)malloc(sizeof(int)*2);if(unlikely(!ret[i])){for(intk=0;k<=(*returnSize);k++){free(ret[k]);}free(ret);returnNULL;}ret[i][0]=heights[i];ret[i][1]=i;(*returnSize)++;}//二维数组排序qsort(ret,heightsSize,sizeof(int*),cmp);char**ans=(char**)malloc(sizeof(char*)*heightsSize);if(unlikely(!ans)){returnNULL;}// for(int i=0;i<heightsSize;i++)// {// ans[i]=(char *)malloc(sizeof(char)*namesSize);// ans[i]=names[ret[i][1]];// }// return ans;for(inti=0;i<heightsSize;i++){// 复制字符串而不是直接赋值指针ans[i]=(char*)malloc(strlen(names[ret[i][1]])+1);if(unlikely(!ans[i])){// 释放已分配的内存for(intj=0;j<i;j++){free(ans[j]);}free(ans);for(intk=0;k<heightsSize;k++){free(ret[k]);}free(ret);returnNULL;}strcpy(ans[i],names[ret[i][1]]);}// 释放临时数组for(inti=0;i<heightsSize;i++){free(ret[i]);}free(ret);returnans;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 0:40:59

Qwen-Image API:文生图与智能编辑全解析

Qwen-Image API&#xff1a;文生图与智能编辑全解析 在一家快消品牌的营销部门&#xff0c;设计师小李正对着电脑叹气。 距离中秋上线只剩48小时&#xff0c;电商平台要求更换主图文案——从“团圆价到手”改成“月满价更满”。可这张主图是三天前用AI生成的&#xff0c;原始Pr…

作者头像 李华
网站建设 2026/5/29 19:40:48

基于Android的乡村研学旅行APP系统(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦乡村研学旅行资源分散、报名流程繁琐、行程管理不便的痛点&#xff0c;设计实现基于 Android 的乡村研学旅行 APP。系统以 Java 为核心开发语言&#xff0c;基于 Android 原生框架搭建移动端应用&#xff0c;搭配轻量后端服务架构&#xff0c;处理研学线路发…

作者头像 李华
网站建设 2026/5/29 19:31:40

在LobeChat中集成Ollama运行本地大模型

在 LobeChat 中集成 Ollama 运行本地大模型 你有没有试过在完全离线的情况下&#xff0c;和一个响应迅速、理解力强的大模型流畅对话&#xff1f;不需要联网、不上传任何数据&#xff0c;所有计算都在你的电脑上完成——这正是 LobeChat Ollama 组合带来的真实体验。 LobeCh…

作者头像 李华
网站建设 2026/5/29 20:27:33

一杯咖啡的情感魔法:瑞幸×《疯狂动物城2》引爆全民消费狂欢

2025年末的消费市场,被一只兔子和一只狐狸彻底点燃。当《疯狂动物城2》时隔9年携温暖回归,瑞幸咖啡的联名营销没有停留在简单的Logo叠加,而是以IP情感为燃料,用场景化运营为引擎,构建了一场覆盖线上线下的全民参与式消费盛宴。这场合作不仅让限定咖啡上线当天销量实现常规新品三…

作者头像 李华
网站建设 2026/5/29 19:43:00

监听 edge大声朗读 样式变化

<msreadoutspan class"msreadout-line-highlight msreadout-inactive-highlight">黛玉方进入房时&#xff0c;只见两个人搀着一位鬓发如银的老母迎上来&#xff0c;黛玉便<msreadoutspan class"msreadout-word-highlight">知</msreadoutspa…

作者头像 李华
网站建设 2026/5/29 19:59:26

vue基于Spring Boot的高校教师考勤科研培训管理系统设计与实现

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华