c бесплатным вопросом - PullRequest
0 голосов
/ 29 июля 2009

Это нормально делать в с?

int *i;
// do stuff

i = NULL;

i = (int *) some_func();
// do stuff

if (i != NULL)
    free(i);

i = NULL;

// do stuff
i = (int *) some_func();
// do stuff
if (i != NULL)
    free(i);

i = NULL;

Ответы [ 13 ]

0 голосов
/ 29 июля 2009

Это нормально, пока some_func () делает то, что должен делать. Если он назначит неверный (нераспределенный) адрес i, это приведет к сбою вашей программы.

0 голосов
/ 29 июля 2009

Если some_func возвращает указатель, который указывает на динамически выделенную память, да.

0 голосов
/ 29 июля 2009

Если вы имеете в виду, можно ли повторно использовать указатель int вместо объявления нового при каждом использовании, убедитесь, что это нормально, но в целом это может сбить с толку, если весь ваш // do stuff состоит из большого количества кода. Другой программист может запутаться, откуда взялся *i и почему это означает X здесь и Y там.

...