Передача указателя в функцию, данные инициализируются в функции, а при возврате - неинициализированными - PullRequest
0 голосов
/ 06 мая 2010

Я передаю функцию GetCurrentDate() указатель на структуру tm. Внутри этой функции я печатаю неинициализированные данные, затем инициализирую. Ожидаемые результаты.

Однако, когда я возвращаюсь, структура tm кажется неинициализированной. Смотрите вывод консоли ниже. Что я делаю не так?

неинициализированная дата: ??? ??? - 1073908332 01: 9448278: -1073908376 -1217355836

дата инициализации: ср 5 мая 23:08:40 2010

Дата звонящего: ??? ??? - 1073908332 01: 9448278: -1073908376 -121735583

int main()
{
    test(); 
}

int test()
{
    struct tm* CurrentDate;
    GetCurrentDate(CurrentDate);
    printf("Caller date:%s\n",asctime (CurrentDate));
    return 1;
}

int GetCurrentDate(struct tm* p_ReturnDate)
{ 
    printf("uninitialized date:%s\n",asctime (p_ReturnDate));
    time_t m_TimeEntity;
    m_TimeEntity = time(NULL); //setting current time into a time_t struct

    p_ReturnDate = localtime(&m_TimeEntity); //converting time_t to tm struct
    printf("initialized date:%s\n",asctime (p_ReturnDate));
    return 1;
}  

Ответы [ 3 ]

6 голосов
/ 06 мая 2010

Вы обновляете указатель p_ReturnDate в функции, а не обновляете структуру, на которую указывает p_ReturnDate. Поскольку указатель передается по значению, обновление не влияет на вызывающего.

Также, как указал Джозеф Куинси , вам необходимо указать место для результата. Вы выделяете только указатель в вызывающей стороне, а не всю структуру.

5 голосов
/ 06 мая 2010

В test () вам необходимо указать память для хранения данных. Например;

struct tm CurrentDate;
GetCurrentDate(&CurrentDate);
printf("Caller date:%s\n",asctime(&CurrentDate));
1 голос
/ 06 мая 2010
int
main()
{
    test(); 
}

void
test()
{
    struct tm CurrentDate;

    GetCurrentDate(&CurrentDate);
    printf("Caller date:%s\n", asctime(&CurrentDate));
}

void
GetCurrentDate(struct tm* p_ReturnDate)
{ 
    time_t m_TimeEntity;

    printf("uninitialized date:%s\n", asctime(p_ReturnDate));    
    m_TimeEntity = time(NULL); //setting current time into a time_t struct
    *p_ReturnDate = *localtime(&m_TimeEntity); //converting time_t to tm struct    
    printf("initialized date:%s\n", asctime (p_ReturnDate));
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...