谨防动态数组越界造成的内存泄露

简介: 在Delphi中,静态数组,编译器会自动检测下标是否越界,动态数组,不会自动检测。注意:delphi中数组的下标索引是从0开始的,也就是说,如果数组长度为2,则下标索引分别为0,1 procedure TestArray;var  arr1: array[0.

在Delphi中,静态数组,编译器会自动检测下标是否越界,动态数组,不会自动检测。

注意:delphi中数组的下标索引是从0开始的,也就是说,如果数组长度为2,则下标索引分别为0,1

 

procedure TestArray;

var

  arr1: array[0..2] of byte; //静态数组

  arr2: array of byte;//动态数组

begin

  //静态数组

  arr1[0] := 1;

  arr1[1] := 2;

  arr1[2] := 3;

  arr1[3] := 4; //这一行不能编译通过,会提示下标越界

 

  //动态数组

  SetLength(arr2, 3);

  arr2[0] := 1;

  arr2[1] := 2;

  arr2[2] := 3;

  arr2[3] := 4; //这一行能编译通过,但是已经造成了内存泄露,要谨防这样使用

end;

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