使用指针访问参数接收的结构中的元素时内存泄漏

Memory Leakage when accessing, using pointer, elements from a struct received by argument

本文关键字:结构 元素 泄漏 内存 指针 访问 参数      更新时间:2023-10-16

一点上下文:我最近开发了一个通用函数,根据显示图像的哪些部分发生了更改来更新显示图像。为此,我收到一个已知的结构作为参数,其成员是字符数组(显示行(,并将其与当前显示的信息进行比较,以便更新必要的信息,从而提高性能。它是arm cortex-m0的嵌入式系统,以备不时之需。下面是结构的代码段。

struct displayLines {
char firstLine[13];
char secondLine[13];
char thirdLine[13];
char fourthLine[13];
char fivethLine[13];
char sixthLine[13];
};
typedef struct displayLines st_displayLines;

基于该结构,我使用一个指针,用第一个元素地址初始化,并用它来访问整个结构数据(所有行(。下面的代码片段显示了我如何初始化指针。

void updateScreen(st_displayLines st_toDisplay)
{
char *ptrtoUpdate  = st_toDisplay.firstLine;
char *ptrDisplayed = st_currentlyDisplayed.firstLine;
//Here is the update code which consumes the pointers.
}

在使用相同的指针变量进行操作(对其使用算术运算(并消耗其数据后,我只从函数返回,而不使用对指针变量调用free操作。

最后的问题是:
这是内存泄漏吗?或者,一旦我在函数范围之外,用于创建指针的分配内存就会被释放?
如果它是一个泄漏,那么每次调用这个函数时,它会为内存中的每个指针变量保留1个字节吗?如果我只有10字节的可用内存,那么在函数的第6次调用时,我的程序会崩溃吗?

当用malloc分配的内存不再有指针指向它并且内存没有空闲时,就会发生内存泄漏。正如您所展示的,代码没有分配内存,因此没有泄漏。

简单地使用指针变量与使用int没有什么不同。变量在声明时处于作用域内,在封闭复合语句结束时超出作用域。所以没有必要释放任何东西。