当您使用malloc()
请求内存并且没有free()
内存时,会发生内存泄漏。
不好的例子
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *nums = malloc(10 * sizeof(int)); // create array with memory for 10 nums
nums[0] = 2;
nums[4] = 8;
return 0; // main() ended but nums wasn't free'd. Memory leak/
}
很好的例子
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *nums = malloc(10 * sizeof(int)); // create array with memory for 10 nums
nums[0] = 2;
nums[4] = 8;
free(nums); // free memory allocated for nums
return 0;
}
现在关于你的程序。
1 - 重新格式化
此程序将永远不会结束,永远叫X(因而打印的Hello World,直到时代的结束!)
#include <stdio.h>
void x(void) {
printf("Hello World!\n");
}
int main(int argc, char *argv[]) {
while (1) x();
return 0;
}
2 - 格式化
此程序分配每个循环100个整数的内存,但永远不会释放这个内存。巨大的内存泄漏一直持续到操作系统内存不足。
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *x;
while (1) {
x = malloc(100 * size(int)); // allocate memory for an array of 100 integers
}
return 0;
}
3 - 格式化
该程序保持递归直到堆栈耗尽(堆栈跟踪),程序会崩溃(堆栈溢出)。
void x(void) {
x();
}
int main(int argc, char *argv[]) {
x();
return 0;
}
我有一个问题给你。当你尝试这些程序时会发生什么?多久时间? – 2011-03-23 10:03:45
这些是三个不同的(相关问题),其中一些是无法解析的(特别是2取决于您的配置,操作系统位数,甚至编译器选项)。甚至更多的是,在答案中实际上几乎没有任何价值...... – 2011-03-23 10:04:05
如果没有正确的缩进,代码就接近“难以阅读”。 – Vatine 2011-03-23 10:04:31