Mám tyto dvě struktury:
typedef struct {
int skip_lines;
int num;
int i;correctly and then not to change!
char filename[70];
char main_directory[16];
char submain_directory[100];
} TABLE_;
typedef struct {
TABLE_ radiation_insolation[7];
TABLE_ radiation_radiation[5];
TABLE_ winds[9];
TABLE_ pressure[1];
TABLE_ humidity[1];
TABLE_ temperature[4];
} TABLES;
ve funkci main dělám toto:
TABLES tables;
TABLES * table_types[TABLE_TYPES_NUM]; // 6 - count of table types
table_types[0] = tables.radiation_insolation;
// int si = sizeof( *(table_types[0]) ); // insolation size 5400 checked
table_types[1] = tables.radiation_radiation;
table_types[2] = tables.winds;
table_types[3] = tables.pressure;
table_types[4] = tables.humidity;
table_types[5] = tables.temperature;
initiate(&tables);
readfiles(&tables, table_types);
radiation_insolation je pole typu TABLE_ o rozměru 7. funkce initiate načte data ze souboru do 7 tabulek typu radiation_insolation. Pak spouštím funkci readfiles, respektive preaparBuffer kde řeším následující věc:
prepareBuffer(&tables, rowBuf, table_types);
char * prepareBuffer(TABLES * tables, char * buf, TABLES * table_types);
TABLE_ * t;
int currentTableElementsNum = 0;
int offset = 0;
// iterrate through table types.
t = &(table_types[i]);
for(i = 0; i<TABLE_TYPES_NUM; i++) // count of tables
{
t += offset;
offset += sizeof(table_types[i]);
}
V prvním cyklu t je (TABLE_ *) 0x22ea20
offset je 5400, což se shoduje s testem velikosti, který jsem dělal přímo v main().
V druhém cyklu chci nastavit ukazatel na následující pole tabulek, kterým je
radiation_radiation o rozsahu 5.
Myslel jsem si že pozice na následující pole tabulek se vypočítá takto:
offset += sizeof(table_types[i]);
t += offset; // nastavit pointer t + offset
no, ale v druhém cyklu dostávám že t ukazuje na nepřístupnou část paměti 0x3364e0.
Podle mých výpočtů by adresa měla být
t: 0x22ea20 + 5400 dec čili (0x22ea20 + 0x1518) = **0x22FF38**
Kde tedy dělám chybu, že to neukazuje správně na druhou sadu tabulek?