- 博客(22)
- 收藏
- 关注
原创 C语言中指针操作的安全性与陷阱:深入理解非法指针引用
在C语言编程中,指针是一种强大的工具,它能够直接操作内存地址,提供灵活的数据处理能力。本文将通过一个具体的代码示例来探讨指针操作中常见的陷阱之一:非法指针引用,以及它可能导致的问题。在处理指针时保持谨慎和细致的态度,是成为一名优秀的C语言程序员不可或缺的一部分。这段代码乍看之下似乎没有明显的语法错误,但它实际上包含了严重的逻辑缺陷和潜在的运行时错误。:一旦指针不再指向有效的内存位置(例如,当它所指向的对象被销毁或重新分配),应将其设置为。指针或未初始化的指针,递增或递减操作是未定义的,应避免执行此类操作。
2024-06-26 10:13:11
238
原创 C语言实现一个简单的文件拷贝程序
1024# define _CRT_SECURE_NO_WARNINGS # include # include # include # define SIZE 1024 * 2 //每次读写2k数据。
2024-05-15 14:10:37
333
1
原创 探秘C++中的Placement New:深度解析与常规new的对比
为C++开发者提供了在特定内存地址构造对象的能力,与常规new相比,它虽需手动管理内存生命周期,但却赋予了内存使用的高度灵活性和性能优化空间。在内存敏感或追求极致性能的场景,如内存池实现、硬件交互中,成为不可或缺的工具,通过直接在预分配内存上创建对象,有效规避了频繁内存分配的开销与碎片化问题,展现了其在特定应用中的独特价值。
2024-05-04 17:00:49
1443
1
原创 安全地管理C++中的内存 —— 删除null指针的考量与实践
引言C++标准对删除null指针的规定安全实践:为什么删除null指针是合理的智能指针与手动管理的对比结论。
2024-05-02 15:44:26
1284
2
原创 C语言数组越界访问导致的死循环问题
在C语言中,数组越界的行为是未定义的(Undefined Behavior, UB),意味着编译器不必对此类错误进行检查,且实际发生什么取决于编译器、运行时环境等因素。在某些情况下,程序可能会恰好在数组的末尾之后有一些未使用或可写的内存,此时对a[N]的写入可能不会立即导致程序崩溃。但是,这也可能导致覆盖掉紧随数组之后的内存区域的数据,如果那个区域存储的是循环控制变量(在这个例子中是i),则可能会无意中修改循环条件,从而导致死循环。在C语言编程中,要时刻注意数组的索引范围,避免出现越界访问的问题。
2024-04-30 10:24:37
138
原创 链表、指针技巧与良好品味
引言代码示例CS101版本一个更优雅的解决方案它是如何工作的整合头指针维护一个句柄更进一步在现有项前插入快速重构实现`insert_before()`函数结论。
2024-03-03 09:43:00
756
2
原创 K-均值聚类算法
在这个示例中,我们利用了向量(vector)来存储二维平面上的数据点,使用随机选择的方法初始化聚类中心,并通过迭代更新聚类中心和簇的分配来最终得到聚类结果。K-均值聚类算法是一种无监督学习方法,其目的是将一组数据点划分成 K 个簇,使得同一个簇内的数据点之间的相似度最高,不同簇之间的相似度最小。对于每个数据点,计算它与 K 个质心之间的距离,将其归为距离最近的簇。需要提前指定簇的数量 K,但实际应用中可能无法确定。对于异常点的处理较为困难,可能会被分到错误的簇中。对于非凸形状的数据集,聚类效果可能不佳。
2023-10-06 12:54:46
143
1
原创 C和CPP函数
函数的返回值(int void …)函数的名字(函数的形参列表);{函数的执行体}void表示函数没有返回值,或者没有形参return表达式 的含义1.终止被调用的函数,向主函数返回一个值(需要输出)。2.如果表达式为空,则只终止函数。不向被调函数返回任何值。函数返回值类型也称为函数的类型,return返回的值无论如何,只会返回函数类型的值。3.break 是用来终止循环和switch的,return 是用来终止函数的。例如void f()return;
2023-09-08 16:29:44
116
原创 VS的警告_CRT_SECURE_NO_WARNINGS
在使用 Visual Studio 进行 C/C++ 开发时,调用不安全的函数可能会引发内存泄漏等问题。为了解决这一问题,建议使用带 `_s` 后缀的安全函数,如 `strcpy_s`、`strcat_s` 等。然而,如果想继续使用不安全函数,有两种方法可以忽略 `_CRT_SECURE_NO_WARNINGS` 警告:在代码文件开头添加宏定义 `_CRT_SECURE_NO_WARNINGS`,或通过 Visual Studio 的属性设置中添加预处理器定义 `_CRT_SECURE_NO_WARNING
2023-06-02 12:49:37
7303
8
原创 C语言存储类型
本文主要介绍了 C 语言中的 const、static、extern、register 和 volatile 关键字的使用方法和作用,以及在实际编程中的应用场景。其中 const 表示只读的变量,static 表示生命周期设置到程序结束,extern 扩展全局变量作用域,register 让变量存储在寄存器中,而 volatile 主要是与编译器优化有关。同时,该文还介绍了 auto 在 C++11 中的使用方法,以及在 C 语言中一般指代非静态局部变量。
2023-05-20 23:44:40
74
原创 我的创作纪念日
写的最好的代码竟然是讲解语法的代码,好吧,还是多出语法解释吧。创作方面有缘再写吧,现在大家都用gpt。打算以后用AI写出一个个的开源程序,专为局域网而生的。bing搜索老是出现你CSDN,不来写篇文章不行啊。没人关注,无所谓了,能帮到大家就好。
2023-04-06 08:30:15
71
2
原创 cpp才有的模板
函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或double)替换。C++的类模板为生成通用的类声明提供了一种更好的方法(C++最初不支持模板,但模板被引入后,就一直在演化,因此有的编译器可能不支持这里介绍的所有特性)。需要交换int的函数时,编译器将按模板模式创建这样的函数,并用int代替AnyType。同样,需要交换double的函数时,编译器将按模板模式创建这样的函数,并用double代替AnyType。2.可以设置为空模板类型,强制使用模板。
2022-12-01 22:45:05
61
原创 C语言时间函数
主要的结构体如下。// 秒 - [0, 60] including leap secondint tm_min;// 分钟 - [0, 59]// 时 - [0, 23]// 日期 - [1, 31]int tm_mon;// 月份从0开始 - [0, 11]// 当前时间减去1900// 星期 - [0, 6]// 从1月1号开始的日期 - [0, 365]// 夏令时时间两个简单的类型定义time_t。
2022-10-22 14:16:57
374
游戏开发,坦克大战资源,图片音乐
2023-05-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人