當您使用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