我很好奇你编写C程序时内存泄漏的情况。
以下是内存泄漏的例子吗?
#include <stdio.h>
int main(void)
{
int num[5];
int i;
for(i=0;i<5;i++)
scanf("%d", (num+i));
printf("%d\n", num[5]); //printing the data stored at loc num[5] which is not present.
return 0;
}
打印存储在未初始化变量中的值。
当void*memcpy(const*dst,void const*src,size_t n)
和src
指针指向相同的内存地址或函数在地址重叠时未定义时,会发生dst
函数内存泄漏。
在已经释放的相同指针上多次使用free()
。例如:
#include <stdio.h>
int main(void)
{
int*num = NULL;
int i;
num = (int*) calloc(sizeof(int), 5);
for (i = 0; i < 5; i++)
scanf("%d", (num + i));
free(num);
free(num);
return 0;
}
答案 0 :(得分:2)
所有上述情况都会导致undefined behavior。
printf("%d\n", num[5]);
是超出内存的访问权限。
如果变量具有陷阱表示,则打印存储在未初始化变量中的值会导致UB。
memcpy()
,UB。
多个free()
也是UB。
此外,内存泄漏与任何无效访问无关,只是浪费内存导致系统内存不足。您可以阅读有关here的更多信息。