Пояснить результат работы кода - C (СИ) (72541)
Формулировка задачи:
Добрый вечер.
кто нибудь может объяснить в чем здесь подвох?
http://rextester.com/BKATS43592
вывод:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)malloc(sizeof(int));
int *q = (int*)realloc(p, sizeof(int));
*p = 1;
*q = 2;
if (p == q)
printf("%d %d\n", *p, *q);
}
//$ clang -O realloc.c ; ./a.out
1 2
Решение задачи: «Пояснить результат работы кода»
textual
Листинг программы
int main() {
int *p = (int*)malloc (sizeof(int));
if (!p) return 1;
int *q = (int*)realloc (p, sizeof(int));
if (q != p) return 1;
p = (int*)realloc (p, sizeof(int));
if (p != q) return 1;
*p = 1;
*q = 2;
if (p == q) printf("%d %d\n", *p, *q);
return 0;
}
Объяснение кода листинга программы
- Объявлена переменная
pтипаint*и инициализирована значениемNULL - Выполнена операция
mallocдля выделения памяти под один целочисленный объект, результат приведен к типуint*и присвоен переменнойp - Проверка на успешность выделения памяти с помощью оператора
ifи возврат значения 1 в случае неудачи - Объявлена переменная
qтипаint*и инициализирована значениемNULL - Выполнена операция
reallocдля изменения размера памяти, выделенной переменнойp, на размер памяти, необходимый для одного целочисленного объекта, результат приведен к типуint*и присвоен переменнойq - Проверка на успешность изменения размера памяти с помощью оператора
ifи возврат значения 1 в случае неудачи - Выполнена операция
reallocдля изменения размера памяти, выделенной переменнойp, на размер памяти, необходимый для одного целочисленного объекта, результат приведен к типуint*и присвоен переменнойp - Проверка на успешность изменения размера памяти с помощью оператора
ifи возврат значения 1 в случае неудачи - Переменная
pприведена к типуintи присвоен результат приведенной переменнойq - Переменная
qприведена к типуintи присвоен результат приведенной переменнойp - Проверка на равенство переменных
pиqс помощью оператораifи возврат значения 1 в случае неравенства - Вывод на консоль значения переменных
pиqс помощью функцииprintf - Возврат значения 0, указывающего на успешный исход работы программы