Как узнать, что объекта не существует
- Войдите на сайт для отправки комментариев
Ср, 10/06/2020 - 18:47
Имею следующую картину
struct TDevice { byte Type; byte Device_ID; }; struct TGate { String Key; String Model; String Sid; byte MiDeviceCount = 0; TDevice* Device[MAX_DEVICES]; };
соответственно в какой-то момент создается экземпляр TGate и внутри него создаются экземпляры TDevice.
Но может сложить ситуация, что экземпляр TGate есть, а экземпляров TDevice внутри нет. Естественно, обращение к несуществующему объекту приводит к зависанию, как мне отработать такое исключение?
Я думал, что достаточно будет сделать так
if (Gate[i]->Device[j] != NULL) {
//девайс существует
}
else {
//девайса нет
}
Но почему-то, несмотря на то, что я заведомо знаю, что Device[j] не существует, условие возвращает Истину.
В 11 строке напишите:
TDevice* Device[MAX_DEVICES] = NULL;
Тогда при создании очередной переменной типа TGate поле Device в ней будет автоматически инициироваться нулём.
Не компилится.
array must be initialized with a brace-enclosed initializer
Но натолкнуло на мысль
при создании нового Gate занулять все девайсы руками. Так сработало, но не понятно, почему без этого не пашет, и что там с памятью по итогу получается.
Так а что должно сработать? При выделении памяти для переменной типа TGate в этой памяти может быть что угодно, поля то не инициировал никто.
Ну то есть такая конструкция верная
все поля проинициалиизрованы, но в памяти ничего лишнего не болтается, правильно?
Ну вроде да.
TDevice* Device[MAX_DEVICES] = {0}
В описании структуры. И всё.
TDevice* Device[MAX_DEVICES] = {0}
В описании структуры. И всё.
Ну да, логично, это же массив
Всем большое спасибо!
Век живи, век учись
Код, как всегда (ЕРСТ!!!), приведён не полностью, потому, может, там всё и нормально, но меня крайне смутила вот эта фраза:
соответственно в какой-то момент создается экземпляр TGate и внутри него создаются экземпляры TDevice.
Надеюсь, Вы понимаете, что в данном огрызке кода никакие экземпляры TDevice не создаются?
А вот ту по подробнее Евгений, если не затруднит. Полагаю в объявлении что-то не так, но сильно сомневаюсь в своём умозаключении.
А вот ту по подробнее Евгений, если не затруднит. Полагаю в объявлении что-то не так,
Всё так. Объявлен массив указателей. Вот они (указатели) и создаются. Никакие объекты не создаются - кто их будет создавать?