Нет, это все еще должно быть доступно для вас.Единственный способ потерять значение было бы, если бы x
было 0 на одной из итераций вашего цикла while
или если вы выполняете malloc
во внешнем цикле без входа во внутренний цикл - трудно сказать,это возможно, поскольку вы не указываете, что такое something
в обоих случаях.
Это правда, что переменная, созданная в определенной области, исчезнет, когда вы выйдете из этой области, но здесь это не так.Выделенная память переживет изменения объема.Указанный указатель на эту память может не совпадать с вашим указателем в этом случае (info
все еще находится в области видимости при выходе из внешнего оператора while
).
Я вижу еще одинпотенциальная проблема - ваш malloc(sizeof(char *) * strlen(name))
, вероятно, должен быть malloc(strlen(name) + 1)
(так как sizeof(char)
всегда равен 1).Вероятно, это работает, потому что char *
обычно будет больше, чем char
, но, тем не менее, это неправильный способ сделать это.
Однако в вашем коде я не вижу нигде, где вы фактически устанавливаете info->mini[0]->name
ко всему, так что я в растерянности относительно того, как оно может иметь правильное значение, если только оно каким-то образом не получает значение из предыдущего malloc
(это возможно, поскольку сам malloc
не требуетсячтобы очистить память, которую он вам дает).
Вы должны опубликовать свой действительный код или, желательно, самый маленький фрагмент кода, который обнаруживает проблему.