int* p_numbers = ((int*) malloc (5*sizeof(int)));
+---+---+---+---+---+
p_numbers --> | x | x | x | x | x |
+---+---+---+---+---+
int* temp;
temp = p_numbers;
p_numbers --+ +---+---+---+---+---+
+--> | x | x | x | x | x |
temp--------+ +---+---+---+---+---+
вам также нужно освободить p_numbers
, так как в противном случае вы получите утечку памяти.
также, пожалуйста, возьмите за правило не приводить возвращаемое значение из malloc
, потому что в некоторых случаях это может привести к трудным поискам ошибок
объяснение:
значение malloc определено stdlib.h
, если вы забудете включить этот заголовок, по умолчанию предполагается, что функция malloc
будет возвращать int
, как в C для функций, не имеющих прототипа. Теперь, если у вас есть что-то вроде char*p = (char*)malloc(12);
, это может вызвать проблемы, потому что вы фактически преобразуете integer
в char*
. При явном приведении вы заставляете замолчать предупреждения от компилятора, и если у вас есть аппаратное обеспечение / ОС, где sizeof(char*) != sizeof(int)
, вы можете столкнуться с трудностями при обнаружении ошибки, поэтому просто напишите
p_numbers = malloc(5*sizeof(int))
если вы используете компилятор C ++, используйте new/delete
.