【发布时间】:2017-04-10 13:03:39
【问题描述】:
我只是对编写 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;
}
打印存储在未初始化变量中的值。
当
src和dst指针指向相同的内存地址或地址重叠时函数未定义时,会发生使用void*memcpy(const*dst,void const*src,size_t n)函数内存泄漏。在已释放的相同指针上多次使用
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;
}
【问题讨论】:
-
那为什么要标记
C++? -
内存泄漏仅表示您使用了
malloc而没有使用free。这不会立即成为问题,但是当在循环中完成时,它最终会耗尽所有可用内存,这将阻止程序正常运行。 -
嗯?当指向已分配内存区域的指针的所有用户副本丢失时,您就会泄漏,例如。被覆盖。
-
您似乎在谈论一般的内存相关问题,而不仅仅是内存泄漏。事实上,你的例子都不是关于内存泄漏的。
-
@ThingsWotsit 我正在确认这是否是例如内存泄漏。
标签: c memory memory-management memory-leaks