jenya7 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба Есть структура struct sFlashParam { uint32_t aaa; uint16_t bbb; uint8_t ccc; uint8_t ddd; }; struct sFlashParam flashParam; Я делаю какие то изменения и копирую void ParsePacket(void) { struct sFlashParam tempParam; //load the old content memcpy(&tempParam, (uint32_t*)FLASH_PARAM_ADDR, sizeof (struct sFlashParam)); if (new_packet[0] != tempParam.aaa) { tempParam.aaa = new_packet[0]; //do something } if(new_packet[1] != tempParam.bbb) { tempParam.bbb = new_packet[1]; //do something } //and so on….. WriteToFlash(FLASH_PARAM_ADDR, (uint32_t*) &tempParam, sizeof (struct sFlashParam)); flashParam = tempParam; } теперь я хочу добавить в структуру пару массивов struct sFlashParam { uint32_t aaa; uint16_t bbb; uint8_t ccc; uint8_t ddd; uint8_t eee[4]; uint8_t fff[4]; }; прямое копирование (flashParam = tempParam;) я так понимаю не прокатит,так как есть подозрение что компайлер сделает shallow copy. то есть мне надо добавить еще две строчки WriteToFlash(FLASH_PARAM_ADDR, (uint32_t*) &tempParam, sizeof (struct sFlashParam)); flashParam = tempParam; memcpy(&flashParam.eee, &tempParam.eee,4); memcpy(&flashParam.fff, &tempParam.fff,4); я прав или зря беспокоюсь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба все сработает flashParam = tempParam, Вы же не храните в структуре ссылки или указатели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба все сработает flashParam = tempParam, Вы же не храните в структуре ссылки или указатели. есть подозрение что скопируется адрес масива а не сам массив. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива спасибо. успокоили. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться