谨防数组函数返回值造成的内存泄露

简介: 数组作为函数返回值时,非常容易引起内存泄露。问题现象:Build应用程序后,提示非法内存访问;可是Compile应用程序却没有这个问题。问题思考:函数返回值,在被调用函数中负责释放;局部变量也是在函数调用结束后在函数内被释放。

数组作为函数返回值时,非常容易引起内存泄露。

问题现象:Build应用程序后,提示非法内存访问;可是Compile应用程序却没有这个问题。

问题思考:函数返回值,在被调用函数中负责释放;局部变量也是在函数调用结束后在函数内被释放。如果一个函数调用了另外一个函数,却没有使用被调用函数的返回值,就有可能造成内存泄露。

 

//数组作为函数返回值

function StrToPByte(Const str: string;Var arrByte: array of byte): PByte;
var
  i: integer;
begin
  for i := 0 to Length(str) do
  begin
    arrByte[i] := Byte(Char(str[i + 1]));
  end;

  Result := @arrByte;
end;

 

//错误用法

procedure Test;

var

  arrTest: array[0..15] of byte;

  str: string;

begin

  str := '1239582692918232';

  StrToPByte(str, arrText);  

end;

 

//正确用法(用局部变量引用,才能保证被Delphi释放)

procedure Test;

var

  arrTest: array[0..15] of byte;

  pTest: PByte;

  str: string;

begin

  str := '1239582692918232';

  pTest := StrToPByte(str, arrText);  

end;

相关文章
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
35 3
|
1月前
|
Rust 安全 Java
内存数组越界
【10月更文挑战第14天】
30 1
|
1月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
199 1
|
1月前
|
程序员 C语言
C语言内存函数精讲
C语言内存函数精讲
|
1月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
25 0
|
1月前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
41 0
|
1月前
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
69 0
|
1月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
74 0