Как обменять местами два объекта в памяти, не зная их тип (у меня есть только два указателя m_After и m_Until). Пробовал так: void *tmp = malloc(sizeof(*m_After)); memcpy(tmp, m_After, sizeof(*m_After)); memcpy(m_After, m_Until, sizeof(*m_Until)); memcpy(m_Until, tmp, sizeof(*m_Until)); delete tmp;
Приветствую Вас, imbecile! Для обмена местами двух объектов в памяти необходимо хотя бы знать их размер. Ваша программа будет работать только в том случае, если известен тип данных, т.к. выражение sizeof(* m_After) вернёт размер известного типа данных. Последняя строчка ошибочна: память, выделенная при помощи malloc() должна освобождаться функцией free(). Если размер данных известен, то можно использовать код из приложения (код меняет местами два объекта, не выделяя дополнительной памяти).
Приложение: Ответ отправлен: 22.10.2004, 12:41 Отправитель: Василевский Александр Отвечает vitya
Доброе время суток, imbecile! Извратом заниматься не надо. Но есть serious mistake: то что было malloc, надо free, то что было new надо delete. Ответ отправлен: 22.10.2004, 12:56 Отправитель: vitya Отвечает DSota
Здравствуйте, imbecile! Для этого надо точно знать размеры обьекта, тут sizeof() не сработает - он возвратит 4 или 8 (размер самого указателя). Легче оставить их в памяти как есть на своих местах, а просто поменять местами (значениеми) указатели на эти обьекты. Еще проблема может возникнуть, когда один из обьектов больше другого, и больший обьект при перемещении на место меньшего может просто испортить важные данные. Ответ отправлен: 22.10.2004, 13:19 Отправитель: DSota
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.