Не обнуляется указатель на структуру после вызова функции.

Тема в разделе "LANGS.C", создана пользователем neutronion, 3 мар 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Привет, сообщество! Что-то я совсем ламерю есть код:
    Код (Text):
    1. #include "stdafx.h"
    2. #include "windows.h"
    3. #include "stdlib.h"
    4. struct _mystruct{
    5.     int a;
    6. }*pmystruct;
    7.  
    8.  
    9. void DeleteStruct(struct _mystruct * data)
    10. {
    11.     free(data);
    12.     data = NULL;
    13. }
    14.  
    15. int main(int argc, char* argv[])
    16. {
    17.     pmystruct = (struct _mystruct*)malloc(sizeof(_mystruct));
    18.    
    19.     DeleteStruct(pmystruct);
    20.  
    21.     printf("Hello World!\n");
    22.     return 0;
    23. }
    Вопрос: почему указатель на структуру pmystruct не равен нулю
    после вызова DeleteStruct?
     
  2. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    не равен потому что не обнуляется

    Код (Text):
    1. #include "stdafx.h"
    2. #include "windows.h"
    3. #include "stdlib.h"
    4. struct _mystruct{
    5.     int a;
    6. }*pmystruct;
    7.  
    8.  
    9. void DeleteStruct(struct _mystruct ** data)
    10. {
    11.     free(*data);
    12.     *data = NULL;
    13. }
    14.  
    15. int main(int argc, char* argv[])
    16. {
    17.     pmystruct = (struct _mystruct*)malloc(sizeof(_mystruct));
    18.    
    19.     DeleteStruct(&pmystruct);
    20.  
    21.     printf("Hello World!\n");
    22.     return 0;
    23. }
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    я чего-то не совсем понял, ведь в моей варианте структура передается по указателю, значит... А, кажется теперь понял. В моем варианте структура передается по указателю и я имею право только менять данные структуры, для того чтобы изменить саму структуру нужно передать ее адрес. Спасибо!
     
  4. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Кажется, ты не совсем понял, в твоем варианте передается не структура, а указатель на нее (по значению, поэтому в функцию приходит его копия). Что бы можно было изменить этот указатель, нужно передать его адрес.