两数之和——基于C语言双指针实现
1. 程序代码int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) { int left 0; int right numbersSize - 1; * returnSize 2; while(left right) { int sum numbers[left] numbers[right]; if(sum target) { int* result (int*)malloc(sizeof(int) * 2); result[0] left 1; result[1] right 1; return result; } else if(sum target) { right --; } else { left ; } } return NULL; }2. malloc函数在C语言中malloc函数是用于动态内存分配的标准库函数它允许程序在运行时分配指定大小的内存块。这个函数定义在stdlib.h头文件中其原型为void *malloc(size_t size)其中size参数指定了要分配的内存块的字节数。2.1 为什么要使用这个函数如果写成下面这样int result[2]; // 函数内的局部数组 result[0] left 1; result[1] right 1; return result; // 返回数组首地址编译时就会报警告warning: function returns address of local variable运行后大概率得到乱码、程序崩溃属于典型的悬垂指针野指针问题。原因很简单函数内定义的局部变量包括数组都分配在栈内存上。函数执行结束返回时对应的栈帧会被系统自动销毁回收这块内存会被标记为 “空闲”后续其他函数调用会直接覆盖这块空间。函数返回的只是一个内存地址但地址对应的内存已经失效了调用者再去读取result[0]读到的就是未知的垃圾值甚至触发内存访问错误。打个通俗的比方栈内存就像酒店的临时房间函数调用 开房间住进去函数结束 退房。我们退房之后还把房间号留给别人别人再进去里面的东西早就被清理、换成别人的东西了。而malloc分配的是堆内存相当于我们自己长期租的房子只要我们不主动free退房房子和里面的东西就一直有效把地址给别人别人也能正常访问。2.2 为什么必须用malloc有两个层面的原因1. 语言规则层面C 语言规定不能返回局部数组的地址但可以返回堆内存的地址。 堆内存的生命周期由程序员手动管理不会随函数结束而销毁。你用malloc申请的内存只要调用者不调用free数据就一直有效完全可以安全地传回给函数调用方使用。2. 题目接口约定题目注释里明确写了规则The returned array must be malloced, assume caller calls free().意思就是返回的数组必须用 malloc 分配调用方会负责释放。 LeetCode 的测试框架拿到函数返回的指针后会读取里面的两个下标最后调用free()释放这块内存。如果返回的是栈上的局部数组地址free一个非堆内存地址会直接导致程序崩溃。2.3 补充为什么返回 int 变量就可以你可能会疑惑为什么return left这种返回普通变量就没问题 因为返回普通变量是值传递—— 返回的是变量的副本函数里的变量销毁了不影响返回的这个副本。 而返回数组名本质返回的是指针地址返回的只是地址的副本地址指向的内存已经被销毁了所以会出问题。2.4 总结函数内部自己用定义局部数组完全没问题用完就扔。要把数组传出函数、给外部调用者用必须用malloc在堆上分配保证内存生命周期足够长。3. return NULL这是C 语言的语法强制要求和题目逻辑无关目的是让编译器正常通过编译。C 语言有一条硬性规则只要函数声明了非void的返回类型这里返回值是int*就必须保证函数的每一条执行路径最终都有返回值。我们的代码里return result只写在if (sum target)的分支里只有 “找到解” 的时候才会触发返回。如果循环走完了都没找到解函数就会走到末尾此时如果没有return NULL编译器会直接报错warning: control reaches end of non-void function [-Wreturn-type]意思是 “函数执行到末尾了却没有返回值”属于语法不完整。而题目虽然说明 “输入保证有唯一解”但编译器不会理解题目描述它只会静态检查代码的所有分支。所以return NULL是一个兜底的语法兼容写法—— 在逻辑正确的前提下这行代码永远不会被执行到。

相关新闻

支持 9-36V 宽压直流输入的 AMD Ryzen 7840HS 迷你主机选型方案

支持 9-36V 宽压直流输入的 AMD Ryzen 7840HS 迷你主机选型方案

[TOC] 选型挑战:车载、电力与现场侧的电压瞬变危害B10 DC-DC 降压拓扑与 TVS 瞬态抑制电路分析19V/6.3A (90W) 满载稳定性测试报告解读 1. 选型挑战:车载、电力与现场侧的电压瞬变危害 针对车载监控、AGV 机器人或分布式电力系统,供电的连续…

2026/6/27 5:09:29阅读更多 →
计算机专业大学生必看分析,CTF 竞赛投入与回报完整解读,参赛标准、获奖加分优势全部讲明白

计算机专业大学生必看分析,CTF 竞赛投入与回报完整解读,参赛标准、获奖加分优势全部讲明白

对于计算机专业大学生而言,网络安全相关比赛是提升实战能力、丰富简历亮点的最佳途径。尤其是CTF竞赛和护网行动,已成为企业招聘时的核心参考指标。 本文梳理了适合大学生参与的主流网络安全比赛,详细解析参赛价值、报名方式和备赛技巧&…

2026/6/27 5:09:29阅读更多 →
2026河道治理选杉木桩,源头厂家这样挑才放心

2026河道治理选杉木桩,源头厂家这样挑才放心

近年来,随着国内水利工程与生态修复项目的持续推进,河道治理领域对杉木桩的需求显著增长。作为一种兼具经济性与实用性的天然建材,杉木桩凭借其良好的韧性、适中的硬度以及天然耐腐特性,在护坡、固堤、打桩等环节中得到广泛应用。…

2026/6/27 5:09:29阅读更多 →
新型工业化:新一代智能制造成主攻方向

新型工业化:新一代智能制造成主攻方向

文|诺云集团企策通新型工业化划定的路线图,可以概括为五个关键词——长期任务、三大方向、主攻路径、未来引擎、开放格局。以下逐一拆解。一、“长期战略任务”再定调:锚定2035不动摇推进新型工业化是一项长期战略任务。 这句话既是定调,也是…

2026/6/27 6:19:37阅读更多 →
创建了一个高开应用,从开发中心进入这个高开应用的低开ide时,会报登录信息已过期是为什么?

创建了一个高开应用,从开发中心进入这个高开应用的低开ide时,会报登录信息已过期是为什么?

问题描述: 当前启了一个EOS833的AFCenter,然后用EOS ide创建了一个高开应用,启动后注册到了AFCenter中,开启低开。 但现在有个问题,从开发中心进入这个高开应用的低开ide时,会报登录信息已过期。这块是要怎么设置吗 &…

2026/6/27 6:19:37阅读更多 →
文具店为何能开十几年不倒闭?

文具店为何能开十几年不倒闭?

有没有注意过一个现象。楼下卖文具的那家店,开了十几年,老板还是那个老板,招牌还是那块招牌。但同一条街上搞餐饮的、卖服装的、做百货的——换了一茬又一茬。能撑过三年的,屈指可数。为什么?很多人第一反应是&#xf…

2026/6/27 6:19:37阅读更多 →
持证 HiPlay 音响怎么卖?全域渠道卖点、宣传合规、流量玩法全攻略

持证 HiPlay 音响怎么卖?全域渠道卖点、宣传合规、流量玩法全攻略

同样一台 HiFi 音箱,有无 HUAWEI HiPlay 认证,线上流量、线下进店转化率、客单价差距显著。很多品牌运营团队拿到 HiPlay 证书,却不懂如何利用生态资质打造宣传卖点,白白浪费鸿蒙系统流量扶持与高端产品溢价优势。本文从电商平台、…

2026/6/27 6:19:37阅读更多 →
把客户当聪明人,GEO只能带来流量而不能带来成交

把客户当聪明人,GEO只能带来流量而不能带来成交

前段时间有个律师老哥想做口播视频,于是他在豆包上搜索相关工具的时候搜索到了我之前做的录屏工具。体验之后觉得很契合他的需求,于是根据我产品上的联系方式加上了我。他很好奇我的GEO是怎么做的,为什么豆包能一下子就推荐我的产品&#xff…

2026/6/27 6:19:37阅读更多 →
JavaEE必会面试题,从线程讲到线程安全,一文带你通过多线程面试

JavaEE必会面试题,从线程讲到线程安全,一文带你通过多线程面试

目录 一、讲讲线程与进程的联系 二、线程创建的五种写法 三、产生线程安全问题的五大原因 四、线程的状态有哪几种? 五、死锁产生的四个必要条件[🌟背下来] 六、如何避免死锁? 七、请你写一个懒汉模式线程安全的代码并解释你这样写的原…

2026/6/27 6:14:37阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/27 5:46:02阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →