Алексей1153++
Вот за эту идею спасибо ! Программа собирается из более 4 модулей, может быть нестыковка.
Я както этому не сильно внимания уделял. Компилятору пока амнистия, ну и слава богу.
Действительно, прагмой мы принудительно изменяем режим компиляции. Соответственно сам изменил - сам и должен отследить "в трезвом уме и здравом рассудке".
Освобожусь обязательно проверю.
Еще раз гранд спасиб !
Добавлено через 3 дня, 5 часов, 40 минут и 53 секунды:Алексей1153++,
1. пересмотрел исходники напредмет использования #pragma pack(1)
ко великому стыду, push-pop не использовал. (ПО перегонялось из QNX - WC и собиралось из модулей.
плюха там или не проявлялась или не была замечена. Может и опции компилятра помогали, скорее всего выравнивалось все 1 байт).
2. проверил, добавил push-pop. Это ОНО и было - из-за области действия pack()
Правда отловить цепочку, где именно перекрывает, сложно - есть перекрестные объявления в классах
- придется отслеживать #ifndef - #define, как включаются хедеры, в какой последовательности.
Думаю на этом вопрос закрыть, тк причина понятна.
3. Если в двух словах, в одном модуле, с одним выравниваением размер объекта class ssocket
может быть не равен такому же объекту в другом модуле, с другой опцией выравнивания или умолчанием.
(хотя может и совпасть, тут уж лотерея). А может быть и "четная ошибка". Размер один, а внутри разнобой.
// ======= ssocket.hpp ===========
#ifndef __SSOCKET_H_
#define __SSOCKET_H_
#include <sys\types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma comment (lib,"ws2_32.lib")
typedef int my_int1;
typedef int size_tt; // for TCP.4 lib
// =================
#pragma pack(push,1) <<<<<<<<<< так надо, это правильно (NEW)
//#pragma pack(1) <<<<<<<<<< так НЭ надо
(old-error)
class ssocket
{
. . . .
};
#pragma pack(pop) <<<<<<<<<< так надо, это правильно (NEW)
#endif // SSOCKET_H
Алексей1153++, Спасибо.
Весь исходник не выкладываю, тк. много, да и все понятно, я думаю.