реклама на сайте
подробности

 
 
> memcpy() скопировать одну структуру в другую, ошибок нет, но при работе зависает в этой ф-ии
Метценгерштейн
сообщение Mar 27 2017, 15:30
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



есть две структуры и два их объекта:
Код
typedef struct
{
    uint16_t     addr;
    const char ttt;
        uint8_t      var1;
} struct1_t;
struct1_t tmp_struct;

typedef struct
{
    uint8_t     addr;
    uint8_t    arr[10];
} struct2_t;

struct2_t *tx_struct;


т.е. структура 1-я- это набор разного всего, но sizeof(tmp_struct) возвращает, допустим, 7 байт.

мне надо скопировать tmp_struct в tx_struct, но начиная с поля arr.

Я воспользовался
memcpy (tx_struct->arr, &tmp_struct, sizeof(tmp_struct));

корректно?

Ошибок компилятор не выдает, но при старте программы, туда заходит и там зависает.

В чем может быть дело?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Mar 27 2017, 17:14
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



нет, не проинициализирован.
Что значит, указывает, ли на подготовленную область?

Я т.о.
Код
struct2_t *tx_struct;


создал объект структуры, куда хочу скопировать данные.

Почему я его еще должен инициализировать?
инициализировать, т.е. записать значения?
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 27 2017, 17:23
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(Метценгерштейн @ Mar 27 2017, 20:14) *
создал объект структуры, куда хочу скопировать данные.

Это — просто объявление указателя, память под него не выделяется. Сначала ее malloc'ом надо выделить (либо создать на стеке, заменив указатель на объявление структуры).
Этот код должен падать с сегфолтом, а еще компилятор вовсю должен ругаться!
Советую -Wall -Werror -Wextra в CFLAGS писать — в этом случае не будет соблазна варнинги пропустить.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016