Проблема заключается в объявлении ptr
в вашей первой строке. Кажется, вы хотите, чтобы это было
int *ptr; /* NOT void* */
. В противном случае вам придется бросать его каждый раз. C / C ++ используют объявления времени компиляции, а приведение на malloc
не действует после строки, на которой оно появляется. В частности
ptr = (int*)malloc(sizeof(int)); /* the (int*) HAS NO EFFECT when ptr is declared void* */