内存越界并不等于马上出错

简介: 内存越界并不等于马上出错

内存越界是很让人发愁的事情.为什么发愁?关键就在于,越界访问了,并不会马上出错,甚至可能不出错.举例来说:


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    char buffer[32] = "quantum6";
    printf("buffer = %s\n", buffer);
    //不出错.
    //buffer[55] = 0;
    //崩溃
    buffer[56] = 0;
    //会循环运行
    //buffer[56] = 8;
    printf("buffer = %s\n", buffer);
    return 0;
}


 以上代码做过几次测试,都是这样的结果.



 那么怎么办?吾想到一个办法:


 实现一个类,重载[]操作符.


 以后有机会试试.

目录
相关文章
|
3月前
|
存储 安全 程序员
内存越界写入
【10月更文挑战第13天】
58 4
|
3月前
|
Rust 安全 Java
内存数组越界
【10月更文挑战第14天】
38 1
|
3月前
|
Java 编译器 C++
内存越界读取
【10月更文挑战第13天】
57 2
|
3月前
|
存储 容器
内存越界访问(Out-of-Bounds Access)
【10月更文挑战第12天】
327 2
|
8月前
|
存储 编译器 C语言
C陷阱:数组越界遍历,不报错却出现死循环?从内存解析角度看数组与局部变量之“爱恨纠葛”
在代码练习中,通常会避免数组越界访问,但如果运行了这样的代码,可能会导致未定义行为,例如死循环。当循环遍历数组时,如果下标超出数组长度,程序可能会持续停留在循环体内。这种情况的发生与数组和局部变量(如循环变量)在内存中的布局有关。在某些编译器和环境下,数组和局部变量可能在栈上相邻存储,数组越界访问可能会修改到循环变量的值,导致循环条件始终满足,从而形成死循环。理解这种情况有助于我们更好地理解和预防这类编程错误。
172 0
|
8月前
|
存储 搜索推荐 编译器
C learning_11 (数组和在内存存储的理解、数组越界、数组作为形参)
C learning_11 (数组和在内存存储的理解、数组越界、数组作为形参)
|
8月前
|
存储 编译器 Linux
【内存管理大猫腻:从“越界”到“内存泄漏”应有尽有】
【内存管理大猫腻:从“越界”到“内存泄漏”应有尽有】
|
存储 缓存 Linux
linux下定位多线程内存越界问题实践总结
linux下定位多线程内存越界问题实践总结
[总结]c++ 内存泄露、内存溢出、内存越界和栈溢出
[总结]c++ 内存泄露、内存溢出、内存越界和栈溢出
755 0
|
存储 算法 编译器
学C的第十二天【深入了解数组:一维和二维数组的创建和初始化;一维和二维数组的使用;一维和二维数组在内存中的存储;数组越界;数组作为函数参数;冒泡排序(对数组名的理解)】-2
5.二维数组的使用 操作符 [ ] :下标引用操作符,它其实就是数组访问的操作符,使用两个[ ],访问行和列 二维数组的行和列都是从0开始的

热门文章

最新文章