Всем доброго времени суток и плодотворного творчества! Вопрос вот в чем, то что я получил вызывая функцию read_upd_struct мне нужно использовать все время работы устройства. При вызове данную функцию повторно, хочу как бы обновить массив данных. Для этого я сначала удаляю весь созданный динамически массив, а потом его снова создаю. Вроде утечек памяти я пока не наблюдаю. Вот мне бы хотелось спросить у знающих людей позволительно ли использования такого способа или же подход неграмотный, по хорошему надо как-то по другому? Код (C++): struct Memory { ... }; Memory *arr; int n_arr=0 void setup() { ... read_upd_struct(arr,n_arr); } void read_upd_struct(Memory *&arr, int &n_arr) { n_arr=0; ... free(arr); arr=(Memory*)malloc(n_arr*sizeof(Memory)); ... };
имхо мне кажется, что это и есть правильный путь. Только в коде зачем обнуляется n_arr? Проблема, может быть, возникнет когда переменные по памяти распределятся так, что уже не будет подряд n_arr свободных ячеек. (или это надуманная проблема?)
n-arr - это счетчик. Он считает кол-во считанных блоков. Я в курсе о проблеме, которая может возникнуть с памятью, я это в коде учитываю. Спасибо!
Если это будет использоваться в МК без ОС, то подход неграмотный, ибо память там можно занять и никому больше не отдавать. Она все равно никому не нужна.
Приветствую, рекомендую ознакомиться со стандартом написания безопасного кода для встраеваемых систем MISRA-C, в нем категорически запрещается использование динамически выделяемой памяти. Как по мне, так очень разумное решение, что бы потом не гадать на каком моменте работы приложения, массив затер другие данные. Лучше сразу создайте статический массив достаточного размера