Привет, сообщество! Что-то я совсем ламерю есть код: Код (Text): #include "stdafx.h" #include "windows.h" #include "stdlib.h" struct _mystruct{ int a; }*pmystruct; void DeleteStruct(struct _mystruct * data) { free(data); data = NULL; } int main(int argc, char* argv[]) { pmystruct = (struct _mystruct*)malloc(sizeof(_mystruct)); DeleteStruct(pmystruct); printf("Hello World!\n"); return 0; } Вопрос: почему указатель на структуру pmystruct не равен нулю после вызова DeleteStruct?
не равен потому что не обнуляется Код (Text): #include "stdafx.h" #include "windows.h" #include "stdlib.h" struct _mystruct{ int a; }*pmystruct; void DeleteStruct(struct _mystruct ** data) { free(*data); *data = NULL; } int main(int argc, char* argv[]) { pmystruct = (struct _mystruct*)malloc(sizeof(_mystruct)); DeleteStruct(&pmystruct); printf("Hello World!\n"); return 0; }
я чего-то не совсем понял, ведь в моей варианте структура передается по указателю, значит... А, кажется теперь понял. В моем варианте структура передается по указателю и я имею право только менять данные структуры, для того чтобы изменить саму структуру нужно передать ее адрес. Спасибо!
Кажется, ты не совсем понял, в твоем варианте передается не структура, а указатель на нее (по значению, поэтому в функцию приходит его копия). Что бы можно было изменить этот указатель, нужно передать его адрес.