首页 > 其他分享 >c语言的几个陷阱和代码例子

c语言的几个陷阱和代码例子

时间:2023-06-03 19:00:54浏览次数:40  
标签:10 arr int 代码 越界 例子 内存 陷阱 指针

  1. 数组越界:
int arr[3] = {1, 2, 3};
arr[3] = 4;    // 数组越界

for (int i = 0; i <= 3; i++) {
    printf("%d\n", arr[i]);    // 数组越界
}

在上述代码中,由于数组下标从0开始,arr[3]越界访问了数组最后一个元素的位置,此时程序可能会崩溃或者产生其他不确定的结果;另外在循环中因为i<=3条件中使用了小于等于号,导致循环访问到了数组最后一个元素之后的位置,同样也引起了数组越界问题。

  1. 指针问题:
int *p;
int a = 10;
*p = a;    // 指针未初始化

int arr[3] = {1, 2, 3};
p = &arr[3];    // 指针越界

int *q = NULL;    // 空指针
*q = 10;

在上述代码中,第一个例子中,指针p未初始化就被用来存储变量a的地址,这将导致未知的结果;第二个例子中,指针p超出了数组索引的范围,指向了不存在的地址,同样会导致未知的结果;第三个例子中,指针q初始化为NULL,但是仍然被用来存储变量10,这是一个空指针引用问题,可能会导致程序崩溃。

  1. 内存泄漏:
void func () {
    int *p = (int *)malloc(sizeof(int));
    // do something
    return;    // 遗漏了释放内存
}

在上述代码中,函数func()中使用了动态内存分配函数malloc分配了一段内存,但却没有在函数结束后手动释放这段内存,造成内存泄漏。

  1. 循环陷阱:
int i = 0;
do {
    printf("%d\n", i);
} while (i++ < 5);    // 条件不当

int j = 0;
while (j >= 0) {    // 计数器错误
    j++;
}

在上述代码中,第一个例子中,循环条件中使用了后缀自增运算符,导致循环结束后,i的值又增加了1;第二个例子中,计数器j一直增加,但由于j是无符号整型变量,所以它永远不会小于0,会导致死循环。

  1. 悬垂指针:
int *p;
{
    int a = 10;
    p = &a;    // 悬垂指针
}
*p = 20;

在上述代码中,指针p被用来存储局部变量a的地址,但是当函数块结束后,变量a被销毁了,此时指针p被称为悬垂指针,它指向已经被释放的内存区域,在使用它的时候可能会引起不可预料的问题。

标签:10,arr,int,代码,越界,例子,内存,陷阱,指针
From: https://blog.51cto.com/u_15903730/6408437

相关文章

  • 关于本地代码上传gitee
    一、首先准备两个工具一个是git,一个是tortoisegittortoisegit  链接:https://pan.baidu.com/s/1IubajDKee2TSWVafCiRg_A提取码:xcjqgit链接:https://pan.baidu.com/s/1bcy-JeMfRQs-lbhpnA5bog提取码:xfui(安装步骤省略)二、安装完成右击会出现以下两个东西三、去注......
  • 【代码片段】fasthttp 中的输出使用 gzip 压缩
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯直接上代码:import("github.com/valyala/bytebufferpool""github.com/valyala/fasthttp")funcFasthttpHandler(ctx*fasthttp.RequestCtx){buf:......
  • 时间戳转化“刚刚”、“几小时前”、“几天前”、“几周前”等形式的js代码片段
    代码片段(可用于vue过滤器)functiongetTimeStr(timestamp){ constnow=newDate(); constdate=newDate(timestamp); constdiff=(now-date)/1000;//毫秒转换为秒 if(diff<60){   return"刚刚"; }elseif(diff<3600){   returnMath.f......
  • R语言状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列|附代码数据
    最近我们被客户要求撰写关于状态空间模型的研究报告,包括一些图形和统计输出。状态空间建模是一种高效、灵活的方法,用于对大量的时间序列和其他数据进行统计推断摘要本文介绍了状态空间建模,其观测值来自指数族,即高斯、泊松、二项、负二项和伽马分布。在介绍了高斯和非高斯状态空间模......
  • postman 常用参数例子
    文档路径:https://learning.postman.com/docs/getting-started/navigating-postman/常用tests用法如下:1.检查responsebody中是否包含某个stringtests["Bodymatchesstring"]=responseBody.has("string_you_want_to_search");注意:"Bodymatchesstring"......
  • 低代码的能力边界在哪?
    不同平台的走向肯定不一样,也必将出现一批臭大街的低代码平台(那些毫无创新、低含金量)。大致来探讨下低代码及目前低代码的现状与发展吧。低代码(Low-Code)就是应用新技术、新思想、新的软件架构、新的设计方法打造一个软件定制平台,来实现相对较低的代码编写而实现软件应用需求的目的......
  • php新闻分页代码
    以下是一个简单的PHP新闻分页代码示例:<?php$servername="localhost";$username="username";$password="password";$dbname="news";//创建连接$conn=newmysqli($servername,$username,$password,$db......
  • sublime text mac功能强大的代码编辑器
    sublimetextmac(代码编辑器)是一款功能强大的代码编辑器,该软件可以让用户方便的编辑各种格式的程序代码。sublimetext中文版可以在用户自己想要编辑的程序中插入各种格式,还能轻松添加各种变量,参数和方法。让您能够方便快捷地编辑代码,从而将开发工作变得更加高效。sublimetextma......
  • 零代码编程:用ChatGPT将PDF文件的表格批量转为Excel表格
    电脑中有几百个PDF文件,文件内容格式一致,每个PDF文件第一页是一个表格。想把这几百个PDF文件里面的表格都提取出来,转为excel表,该怎么办?打开ChatGPT(一定要用GPT4,编程能力很强。相比之下,gpt3.5弱太多了),输入提示词如下:d盘有一个文件夹:guanlianjiaoyi,里面有很多pdf文件;你的任务是写一个......
  • mac电脑git配置sshKey后不能下拉代码
    配置全局gitconfig--globaluser.name用户名gitconfig--globaluser.email邮箱gitconfig--list//查看配置的用户ssh-keygen-trsa-C248******@qq.com//输入邮箱,一直回车(遇到y/n,选y)ls-al~/.ssh//查看是否生成了私钥,公钥(id_rsa是私钥id_rsa.pub是公钥)......