Если у вас так определена структура и так, как было показано ранее, добавляете в нее элементы массива - это грубейшее нарушение с точки зрения работы с памятью!
Единственное, в чем я не до конца уверен, так это в том, что С++ не делает самостоятельно выделение памяти под это дело... Где-то на 90% я уверен, что не делает и проблем впереди у вас будет МОРЕ, но на 10% сомневаюсь, ибо С++ я знаю хуже, чем бейсик... а бейсик я не знаю вообще.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Ну, тогда кранты проекту. Локальная структура после выхода из функции живет в стеке до тех пор, пока не будет затерта очередным обращением к стеку. Это не грабли, а граблищи!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
struct module_interface_t
{
char func_cnt; // количество функций в интерфейсе
int* interface[]; // массив неопределенной длины
};
struct module_interface_t DeviceInfo;
int main(int argc, char** argv) {
DeviceInfo.func_cnt=3;
DeviceInfo.interface[0]=(int*) 1;
DeviceInfo.interface[1]=(int*) 2; // Это - крах ! Под 1 и 2-ой элементы не выделена память
DeviceInfo.interface[2]=(int*) 3; // Тоже самое.
return 0;
}
Добавлено after 16 minutes 48 seconds: Re: Си. Передача массива констант в функцию, хранение и вызовы
Так будет правильнее :
[uquote="RealHann",url="/forum/viewtopic.php?p=3117927#p3117927"]Но сейчас-то работает каким-то боком ) И выделение памяти адекватное.[/uquote]
Память под глобальную переменную DeviceInfo резервируется компилятором/линкером в . bss сегменте. И резервируется она размером sizeof(struct module_interface). Если понапихать в него указателей больше чем этот размер - то совсем другие переменные, следуюшие непосредственно за этой DeviceInfo будут перезаписаны совсем не теми данными чем вы от них ожидаете. И как только такие переменные появятся - грабли, распарывая ковёр из прошлогодних листьев, стремглав рванутся в точку звонкой встречи с вашим лбом. :-D Впрочем, если компилятор достаточно сообразителен, чтобы прикинув использование этой переменной, посчитать ему достаточно большой sizeof - то грабли какое-то время и поскучают в одиночестве. Но это какая-то фантастика. Впрочем, почитайте map-файл - все эти чудеса и непонятки с "выделением памяти" там разъясняются.
Добавлено after 58 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3118039#p3118039"]почему не проходит статическая инициализация на этапе компиляции.[/uquote]
Designated инициализации вроде как под [классическими] плюсами не поддерживаются.
Добавлено after 5 minutes 43 seconds:
[uquote="Аlex",url="/forum/viewtopic.php?p=3117937#p3117937"]Так будет правильнее :
[/uquote]
Хм... оператор new по дефолту потянет за кулисами столько всякого разнообразного типа поддержки исключений да и тех же самых выделений из Heap, что как бы лекарство пациенту не оказалось неподъёмным. Особенно на МК с небогатым ресурсом.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Добавлено after 2 minutes 43 seconds: Re: Си. Передача массива констант в функцию, хранение и вызовы
Что-то я написал и засомневался - правильно ли написал? с разыменованием у меня всегда какие-то проблемы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...