pse*_*ble 3 c gcc memory-leaks memory-management
虽然我很少再使用C了,但我一直在考虑我总是被告知的规则"如果你打电话malloc()(或new),你必须打电话free()(或delete)".它让我想知道GCC(或其他C编译器)是否尝试执行任何类型的内存并警告用户潜在的问题.我从来没有听说过,所以我怀疑情况并非如此,但我想知道.
这是我使用的例子:
#include <stdlib.h>
int main() {
int* first = malloc(sizeof(int) * 10);
int* second = malloc(sizeof(int) * 10);
int i = 0;
for (; i < 10; i++) {
first[i] = i * 2;
second[i] = i * 10;
}
free(first); /* Forgot to free second */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc -Wall free_test.c没有警告的情况下进行编译时生成了.虽然我可以看到为什么编译器无法提供完美的答案,因为您正在处理堆内存并在运行时管理它,为什么编译器似乎没有尝试提供可能存在内存泄漏的警告?
我对其中的一些想法包括: