Serge
Проводил эксперименты с кодом и обнаружил странные вещи.
Я менял положение финкции LoadSpectra() в коде программы. С точки зрения логики работы программы это не имеет никакого значения. А вот с точки зрения генерации кода, свободного от ошибок, как оказалось, имеет.
Вот часть кода :
Code: Select all
int main(int argc, char **argv)
{
char exit_status;
struct WINDOW *win;
struct SCREEN *scr;
struct PLOTINFO *plot;
struct lorents_information *lorents;
struct X *x_c;
struct HEADER *Parend;
struct MESSAGE *Message;
struct process_table_entry *ProcessInformation;
struct ControlBookmark2 *Bookmark2;
struct ControlProgressbar *CalculationProgress;
dword *controls;
dword x,y,mouse_buttons;
int i;
int key;
int count_iteration;
float step_iteration;
unsigned char sound_end_calculation[]={150,64,0,0,0};
char *pathspectr;
char *ptr;
char c;
FILE* f;
pathspectr=argv[1];
win=malloc(sizeof(struct WINDOW));
lorents=malloc(sizeof(struct lorents_information));
x_c=malloc(sizeof(struct X));
scr=malloc(sizeof(struct SCREEN));
plot=malloc(sizeof(struct PLOTINFO));
// variant 1
// LoadSpectra(pathspectr,lorents,plot,scr);
_ksys_set_wanted_events(0x67);
count_iteration=0;
Init_libGUI();
win->posx=WINDOW_POSX;
win->posy=WINDOW_POSY;
win->sizex=WINDOW_SIZEX;
win->sizey=WINDOW_SIZEY;
draw_window(win);
// variant 2
// LoadSpectra(pathspectr,lorents,plot,scr);
controls=malloc(TOTAL_NUMBERS_OF_CONTROLS*100);
Parend=(struct HEADER *)malloc(sizeof(struct HEADER));
Message=(struct MESSAGE *)malloc(sizeof(struct MESSAGE));
ProcessInformation=malloc(sizeof(struct process_table_entry));
// variant 3 (work variant)
LoadSpectra(pathspectr,lorents,plot,scr);
CraeteInterface(controls,Parend,win,scr,plot);
DisplayInformation(controls,lorents);
Message->type=MESSAGE_FULL_REDRAW_ALL;
Message->arg1=0;
Message->arg2=0;
Message->arg3=0;
SendMessage(Parend,Message);
Если раскомментировать первый вариант, то программа вылетает из-за неправильного содержимого структур для libGUI(почему-то меняется содержимое заполняемых структур).
Если раскоментировать второй вариант,то структуры для libGUI заполняются правильно, если в директории,где находится программа, нет файла colibrovka.txt (тоесть, если не загружается этот файл).
В случае третьего варианта расположения функции, программа работает так, как ей и положено работать согласно коду программы.
Почему происходят такие странные вещи - я покачто не выяснил.