Я написал программу для Linux (x86,32-bit), все работает нормально. Но когда я пытаюсь скомпилировать и запустить тот же исходный код на Solaris (SPARC, 64-bit), я получаю ошибку шины (SIGBUS). Сообщение от GDB выглядит следующим образом:
gdb) where
#0 0xff2aa57c in number () from /lib/libc.so.1
#1 0xff2a9a70 in __doscan_u () from /lib/libc.so.1
#2 0xff2b0014 in vsscanf () from /lib/libc.so.1
#3 0xff2aeb90 in fscanf () from /lib/libc.so.1
#4 0x00010940 in main (argc=4, argv=0xffbff48c) at wHeap.c:22
Оказывается, ошибка произошла из-за функции fscanf, и соответствующий фрагмент кода выглядит следующим образом:
while( fscanf(input,"%[^,],%hu,%u,%u,%[^\n]\n",record.name,&record.race,&record.class,&record.id,record.guild) != EOF){
......
}
в основном я пытаюсь извлечь информацию из файла с разделенными запятыми значениями и сохранить их в массиве структур (записей), например, таких как:
Rod'rod,1,4,103026,Project Peace
Ceru,1,6,89351,World Keepers
Belget,2,9,246708,Radiant Heaters
Структура записи выглядит следующим образом:
#pragma pack(1)
typedef struct {
char name[MAXNAME];
unsigned short race;
unsigned int class;
unsigned int id;
char guild[MAXGUILD];
}record;
Как вы можете заметить, я использовал пакет pragma, чтобы попытаться предотвратить разницу в выравнивании между этими двумя машинами.