У меня определены следующие typedef и * ButtonSettingPtr в качестве указателя:
typedef struct
{
void *next;
char** buttonsetting;
char* currentsetting;
uint16_t presetid;
uint16_t currentcounter;
uint16_t maxsize;
uint16_t buttonid;
} ButtonSetting;
typedef ButtonSetting *ButtonSettingPtr;
class Options {
private:
ButtonSettingPtr settings;
ButtonSettingPtr preset1;
public:
Options();
void newSetting(char** _setting, uint16_t _maxsize, uint16_t _buttonid);
// some other stuff defined here
}
С помощью функции newSetting () я добавляю несколько новых записей в мой экземпляр typedef!Теперь я хотел бы сохранить все эти настройки (this-> settings) в другом указателе (this-> preset1) через memcpy, чтобы позже вызвать их снова через другую функцию, так как я использую this-> settings в нескольких другихфункции (getCurrentSetting), которые работают довольно хорошо и т. д.
char *Options::getCurrentSetting(uint16_t _buttonid) {
ButtonSettingPtr setting = (ButtonSettingPtr)this->settings;
while (setting != NULL)
{
if (setting->buttonid == _buttonid) {
char * tmpsetting =
setting->buttonsetting[setting->currentcounter];
return tmpsetting;
}
setting = (ButtonSettingPtr)setting->next;
}
return NULL;
}
Вот проблема:
void Options::savePreset() {
memcpy(&this->preset1,&this->settings,sizeof(&this->settings));
}
void Options::loadPreset() {
memcpy(&this->settings,&this->preset1,sizeof(&this->preset1));
}
Кажется, что мой указатель preset1 всегда точно такой же, как this-> даже настройкихотя я меняю настройки между ними.Я понимаю, что со знаком & он буквально копирует адрес этого указателя, поэтому неудивительно, что оба они всегда будут одинаковыми.Но я хотел бы скопировать все байты и указать их на preset1, чтобы я мог позже вспомнить все настройки.
Итак, без знака & мой код просто зависает:
void Options::savePreset() {
memcpy(this->preset1,this->settings,sizeof(this->settings));
}
void Options::loadPreset() {
memcpy(this->settings,this->preset1,sizeof(this->preset1));
}
Должен ли я указывать malloc указатель this-> preset1, прежде чем я запомню все к нему?Весь код скомпилирован с использованием avr-libc для чипа atmega.
Заранее благодарен за любой полезный совет!
ps: Мое понимание C ++ было несомненно лучше, когда я был моложе!