| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Передача указателя в составе структуры |
| Автор: NiJazz 24.10.2004, 00:43 | ||
Структура содержит строку
Когда структуру передаю по именованному каналу, строка приходит пустой, хотя остальные элементы структуры, не указатели, доходят нармально. Убирал освобождение памяти, все равно не работает. Как передать указатель, чтобы значение сохранилось? Спасибо. |
| Автор: chipset 24.10.2004, 01:04 |
| NiJazz Покажи плз. как ты её туда засовываешь? |
| Автор: S.A.P. 24.10.2004, 02:25 | ||
NiJazz на сколько я понимаю ты передаешь указатель на строку по именованному каналу в другой процесс, или грубо говоря, на другой комп, так делать нельзя, потому, что один процесс не может напрямую обратиться к адресному пространству другого процесса. Если тебе надо передать строку, то можешь использовать массив:
|
| Автор: Mad 24.10.2004, 13:25 | ||
Вообщето можно, но надо быть уверенным, что процессы запущенны на одном компе NiJazz Между чем (компами, процессами, потоками) ты передаеш этот указатель ? |
| Автор: S.A.P. 24.10.2004, 13:37 | ||||
|
| Автор: Mad 24.10.2004, 13:46 | ||
Да может он, надо тока сегменты заранее выяснить |
| Автор: Дрон 24.10.2004, 14:47 | ||
| Чего-то вы усложняете Идентификаторы процессов, адресные пространства и всё такое -- это, конечно, очень хорошо, но в данном случае -- как из пушки по воробьям...
Работоспособность не проверял, но вроде всё нормально... Только нужно ещё не забыть после передачи данных удалить массив, полученный из Serialize Добавлено @ 14:50 Тут в Deserialize я предположил, что входным параметром является массив, созданный через new[], и содержащий данные полученные через канал. А в канал, естественно, был заслан массив, возвращённый функцией Serialize |
| Автор: S.A.P. 24.10.2004, 15:11 |
| NiJazz если размер строки не велик, ИМХО удобнее строку держать в шаровом массиве. |
| Автор: bel_nikita 24.10.2004, 17:29 |
| А про конструктор копирования, случаем, не забыли? |
| Автор: Дрон 24.10.2004, 18:25 | ||
Там не в конструкторе копирования дело Это ведь не присваивание, а передача данных на другой компьютер. Фактически моя пара функций Serialize и Deserialize и выполняет функции конструктора копирования. |
| Автор: bel_nikita 24.10.2004, 21:29 |
| Дрон не ну мало ли, может по ссылке объект пихают. И симптомы похожие. Да еще не мешало бы выравнивание структуры добавить. |
| Автор: Дрон 24.10.2004, 22:17 | ||||
Симптомы-то похожие Но здесь прикол в том, что при передаче указателя на другой комп сама строка-то не передаётся! А вот Perchilla предожил относительно простой и правильный выход. Забить постоянный массив внутрь структуры. |
| Автор: bel_nikita 24.10.2004, 22:28 | ||
Ай-ё! Ну так че тогда голову ломать, конечно неправильно. Надо не указатель передавать, ага, типа, как Perchilla предложил. |
| Автор: Adil' 25.10.2004, 09:30 | ||
|
| Автор: Mad 25.10.2004, 13:12 | ||
Вобще пердачу строки лучше делать следующим образом (псевдокод)
|