【C语言】记录一次自己犯下的低级错误 o(╯□╰)o(局部数组与指针数组的传参、赋值)

在这里分享一下本人犯下的低级错误,希望大家别掉同样的坑 o(╥﹏╥)o

文章目录

  • 事情原委
  • 错误分析及解救办法
    • 错误一: 使用局部数组arr并将其作为返回值
      • 解决方法:使用动态内存分配来创建数组,并在函数结束前手动释放内存。
    • 错误二:直接用非空局部数组接收返回值
      • 解决办法:
      • 输出结果:
  • 附上本题归并排序代码

事情原委

事情是这样的: 在头歌平台做归并排序练习的时候,当我点击自测按钮后报错,才发现我没有对指针数组、局部数组进行正确的传参和赋值,感觉指针白学了(*/ω\*)
在这里插入图片描述

错误分析及解救办法

下面就开始盘点我犯下的错误吧。

错误一: 使用局部数组arr并将其作为返回值

在merge_array函数中,创建了一个局部数组arr并将其作为返回值。然而,当函数结束时,局部变量arr将被销毁,因此返回指向该数组的指针是不安全的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决方法:使用动态内存分配来创建数组,并在函数结束前手动释放内存。

在这里插入图片描述

错误二:直接用非空局部数组接收返回值

在merge_sort函数中,我将递归调用的结果赋值给局部数组left和right,但数组名是不可修改的,无法直接赋值。
在这里插入图片描述

解决办法:

可以改为使用指针来传递数组,并在函数内部进行操作。

在这里插入图片描述

输出结果:

在这里插入图片描述
在这里插入图片描述

附上本题归并排序代码

//
//  sort_.cpp
//  Sort
//
//  Created by ljpc on 2018/4/20.
//  Copyright © 2018年 ljpc. All rights reserved.
//#include "sort_.h"void print_array(int *arr, int n)
// 打印数组
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}int* merge_array(int *arr1, int n1, int* arr2, int n2)
//  编程实现两个有序数组arr1和arr2合并
//  函数参数:有序数组arr1 数组arr1长度 有序数组arr2 数组arr2长度
//  函数返回值:返回从小到大排序后的合并数组
{// 请在这里补充代码,完成本关任务/********** Begin *********/int *arr=(int *)malloc((n1+n2)*sizeof(int));int i=0;int j=0;int k=0;while(i<n1 && j<n2){if(arr1[i]<=arr2[j]){arr[k] = arr1[i];i++;}else{arr[k] = arr2[j];j++;}k++;}if(i<n1){while(i<n1){arr[k] = arr1[i];i++;k++;}}else if(j<n2){while(j<n2){arr[k] = arr2[j];j++;k++;}}return arr;/********** End **********/
}
int* merge_sort(int *arr, int n)
//  基于merge_array函数编程实现归并排序:自上而下的递归方法
//  函数参数:有序数组arr 数组arr长度
//  函数返回值:返回从小到大排序后的数组
{// 请在这里补充代码,完成本关任务/********** Begin *********/if(n<2){return arr;}int mid = n/2;int *left = (int*)malloc(mid * sizeof(int));int *right = (int*)malloc((n-mid) * sizeof(int));for(int i=0; i<mid; i++){left[i] = arr[i];}for(int j=mid; j<n; j++){right[j-mid] = arr[j];}left = merge_sort(left, mid);right = merge_sort(right, n-mid);int *merged = merge_array(left, mid, right, n-mid);free(left);free(right);return merged;/********** End **********/
}

以上就是我掉的坑,在这里也希望大家引以为鉴。如果你也有类似经历,欢迎评论区留言,分享给更多的人。

在这里插入图片描述

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

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

相关文章

第11章 GUI Page403~405 步骤三 设置滚动范围

运行效果&#xff1a; 源代码&#xff1a; /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

acwing linux 第七讲 环境变量、管道、常用命令、附录

文章目录 管道 概念 要点 举例 环境变量 查看 修改 常用环境变量 常用命令 系统状况 文件权限 文件检索 查看文件内容 用户相关 其他工具 安装软件 附录 Linux权限 本节课讲解的是管道&#xff0c;环境变量&#xff0c;以及常用命令 管道 概念 管道类似文…

极智嘉(Geek+)货到人方案优势显著,助力拆零场景效率提升

众所周知&#xff0c;零售行业所面临的物流挑战比其他行业更为严峻。这是由于零售行业复杂的行业业态、繁多的商品种类、“唯快主义”的配送需求&#xff0c;以及零售行业的终端客户多为个体消费者&#xff0c;购买习惯以单件、多品为主&#xff0c;购买习惯具有周期性和爆发性…

1. 行为模式 - 责任链模式

亦称&#xff1a; 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility 意图 责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。 收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理…

多任务数据采集

进程&#xff1a;操作系统中资源分配的基本单位 线程&#xff1a;使用进程资源处理具体任务 一个进程中可以有多个线程&#xff1a;进程相当于一个公司&#xff0c;线程是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行&…

禁用windows更新

Windows Update Blocker 傻瓜式禁用windows更新&#xff0c;打开软件点击disable updates就可以了。 下载按钮需要页面往下拉&#xff0c;找到一个download按钮&#xff0c;不仔细找还看不到 它还可以通过编辑ini文件禁用一些其他东西&#xff0c;体积也很小算是很强大的工具了…

Web自动化测试工具的优势分析

Web自动化测试工具在现代软件开发中扮演着关键的角色&#xff0c;帮助团队确保Web应用程序的质量和稳定性。然而&#xff0c;选择合适的Web自动化测试工具对项目的成功至关重要。本文将介绍Web自动化测试工具优势是什么! 1. 自动化执行 Web自动化测试工具能够模拟用户的行为&am…

CSS 网页制作-学成在线

1、 准备工作 1.1 项目目录 网站根目录是指存放网站的第一层文件夹&#xff0c;内部包含当前网站的所有素材&#xff0c;包含HTML、CSS、图片、JavaScript等等。 1.2 版心效果 可以发现都是呈现版心居中的效果&#xff0c;但是每次都写一次太麻烦了&#xff0c;可以把版心居中…

【小白专用】php pdo方式连接sqlserver 设置方法 更新23.12.21

windows系统的拓展相对来说比较好安装&#xff0c;直接下载对应的dll文件&#xff0c;修改php.ini配置文件即可。 添加PHP对SQL SERVER的支持 1.新建PHP 文件&#xff0c;输入内容&#xff1a; <?php echo phpinfo(); ?> 2.运行后&#xff0c;可以查看到如下数据&…

ASP.Net实现姓名添加查询(三层架构)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 点击Button添加姓名 步骤&#xff1a; 1、建文件 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作&#xff09;…

电商行业发展迅速,抓住风口期才能稳赢!

我是电商珠珠 电商平台层出不穷&#xff0c;随着电商的发展&#xff0c;近年来发展模式也有了新的变化。 比如抖音所发展的电商-抖音小店&#xff0c;融合了传统的电商发展模式&#xff0c;并在此基础上增添了兴趣电商的概念&#xff0c;让人们不仅可以去商城搜索自己想要的品…

基于kubernetes集群 容器云管理平台 kubesphere

基于kubernetes集群 容器云管理平台 kubesphere 一、kubesphere 官方参考资料&#xff1a;https://kubesphere.com.cn/docs/v2.1/zh-CN/introduction/intro/ 1.1 kubesphere介绍 KubeSphere是在 Kubernetes 之上构建的企业级分布式多租户容器管理平台&#xff0c;提供简单易用…