【发布时间】:2016-04-17 12:16:32
【问题描述】:
谁能解释一下为什么连续释放a 两次会导致崩溃,但先释放a,然后释放b,然后再次释放a 不会崩溃?
我知道 free 会将堆块插入到双链空闲列表中。释放两次会在空闲列表中插入两次相同的块。但是为什么会发生崩溃呢?
int *a = malloc(8);
int *b = malloc(8);
free(a);
// free(a); // Would crash!
free(b);
free(a); // No crash.
【问题讨论】:
-
Infosec 可能不是这个问题最合适的论坛。考虑 StackOverflow。
-
为什么总是崩溃?即使
int a[5]; a[10] = 100;也不会总是崩溃。 -
了解什么是未定义的行为。你最终会不止一次遇到它。