Что выведет этот код?
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)malloc(sizeof(int));
int *q = (int*)realloc(p, sizeof(int));
if (p == q) {
*p = 1;
*q = 2;
printf("%d %d\n", *p, *q);
}
}
Ответ вот тут.
А на самом деле надо бросать монетку, потому что gcc и msvc выведут
Program returned: 0
Program stdout
2 2
А clang и icc выведут
Program returned: 0
Program stdout
1 2
Но вообще, это просто типичный UB. p после реаллока становится невалидным указателем. Из хорошего - gcc это ловит со включенным
Wall.