Pelles C forum

C language => Beginner questions => Topic started by: Grincheux on July 21, 2020, 01:59:40 PM

Title: Bug
Post by: Grincheux on July 21, 2020, 01:59:40 PM
When I compile using Debug minimize size that's OK
When I compile using maximize speed (always in debug mode) the result is wrong.
See colums header.
If I compile in release, all is wrong too...


(https://www.mediafire.com/convkey/dd90/ufq53nibm31mu4h6g.jpg)
(https://www.mediafire.com/convkey/f8ef/l51ywioity9fuwz6g.jpg)


(https://www.mediafire.com/convkey/61e1/etbjzh87eyf4zml6g.jpg)
(http://www.mediafire.com/view/2p67217fr4ingg9/b4.jpg/file)
Code: [Select]
static void Wnd01_OnCreate(HWND __hWnd)
{
alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;


alignas(int) char _szTmp[1024] ;


    hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;


ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;


ZeroMemory(&_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;


_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;


ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;


_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;

ListView_InsertColumn(hListView_w1,2,&_Lvc) ;


_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;


ListView_InsertColumn(hListView_w1,3,&_Lvc) ;


_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;


ListView_InsertColumn(hListView_w1,4,&_Lvc) ;


_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;


ListView_InsertColumn(hListView_w1,5,&_Lvc) ;


_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;


ListView_InsertColumn(hListView_w1,6,&_Lvc) ;


_Lvc.pszText = "PHA" ;


ListView_InsertColumn(hListView_w1,7,&_Lvc) ;


// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class


// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite


_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;


ListView_InsertColumn(hListView_w1,8,&_Lvc) ;


_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,9,&_Lvc) ;


_Lvc.pszText = "q" ;


ListView_InsertColumn(hListView_w1,10,&_Lvc) ;


_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,11,&_Lvc) ;


_Lvc.pszText = "om" ;


ListView_InsertColumn(hListView_w1,12,&_Lvc) ;


_Lvc.pszText = "w" ;


ListView_InsertColumn(hListView_w1,13,&_Lvc) ;


_Lvc.pszText = "ma" ;


ListView_InsertColumn(hListView_w1,14,&_Lvc) ;


_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,15,&_Lvc) ;


_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,16,&_Lvc) ;


_Lvc.pszText = "per_d" ;


ListView_InsertColumn(hListView_w1,17,&_Lvc) ;


_Lvc.pszText = "per_y" ;


ListView_InsertColumn(hListView_w1,18,&_Lvc) ;


_Lvc.pszText = "MOID" ;


ListView_InsertColumn(hListView_w1,19,&_Lvc) ;


ListView_DeleteColumn(hListView_w1,0) ;


// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent


memset(&_Work,0,sizeof(WORKDATAS)) ;
sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;


So I need help
Title: Re: Bug
Post by: John Z on July 21, 2020, 04:50:27 PM
Hi Grincheux,

Are you using RC3?  There was a bug fix in RC3 that fixed a optimize speed issue I ran into with prior release candidates.
Pelle also suggested that I try
#pragma pack_stack(off)
before the fix was implemented - maybe it will help your situation.

Hope this helps,
John Z
Title: Re: Bug
Post by: Grincheux on July 21, 2020, 05:33:37 PM
I downloaded RC3 and applied  #pragma pack_stack(off) but the problem continue...
When I don't apply any optimisations it is good.
Thank You John
Title: Re: Bug
Post by: John Z on July 22, 2020, 01:40:59 PM
Hi Grincheux,

It does look like pointer confusion.  You might try adding a message box for troubleshooting like:

   _Lvc.cx = 40 ;
   _Lvc.pszText = "NEA" ;
MessageBoxA(__hWnd,_Lvc.pszText,"Should be NEA",MB_OK);
   ListView_InsertColumn(hListView_w1,6,&_Lvc) ;

Also you can insert #pragma optimize(none) just before "static void Wnd01_OnCreate(HWND __hWnd)"
to selectively turn off then
#pragma optimize(time) just after the procedure closing } to resume optimization - this is just to verify that the issue is totally within this procedure. Also gives a way to optimize everything else for speed while this procedure is not.

Another possibility would be to set the pointer _Lvc.pszText  to NULL between uses which may help the compiler de-confuse itself ……

On the code that was shown I did not see any thing that appeared to be a coding error.

Are you compiling with Level 2 warnings ? - you didn't show the top Compiler page options.

Of course this is all troubleshooting or avoidance -

Hope this can help, but I don't have the solution/answer....

John Z
Title: Re: Bug
Post by: Pelle on July 22, 2020, 02:56:27 PM
Try these *temporary* changes:

alignas(HANDLE) LVCOLUMNA _Lvc;  =>  volatile alignas(HANDLE) LVCOLUMNA _Lvc;  // Add volatile
ZeroMemory(&_Lvc, sizeof(LVCOLUMNA));  =>  ZeroMemory((void*)&_Lvc, sizeof(LVCOLUMNA));  // Add (void*) to cast away volatile complains (I think this is the only place...)

( A shortcut, trying to speed up the usage of alias information, misses some cases of &_Lvc -- drowning in a sea of casts to make Windows happy/me unhappy.)
Title: Re: Bug
Post by: Grincheux on July 22, 2020, 09:17:04 PM
Thank Mr Pelle


I added your changes and it WORKS!
Code: [Select]
static void Wnd01_OnCreate(HWND __hWnd)
{
volatile alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;


alignas(int) char _szTmp[1024] ;


    hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;


ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;


ZeroMemory((void *) &_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;


_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;


ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;


_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;

ListView_InsertColumn(hListView_w1,2,&_Lvc) ;


_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;


ListView_InsertColumn(hListView_w1,3,&_Lvc) ;


_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;


ListView_InsertColumn(hListView_w1,4,&_Lvc) ;


_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;


ListView_InsertColumn(hListView_w1,5,&_Lvc) ;


_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;


ListView_InsertColumn(hListView_w1,6,&_Lvc) ;


_Lvc.pszText = "PHA" ;


ListView_InsertColumn(hListView_w1,7,&_Lvc) ;


// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class


// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite


_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;


ListView_InsertColumn(hListView_w1,8,&_Lvc) ;


_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,9,&_Lvc) ;


_Lvc.pszText = "q" ;


ListView_InsertColumn(hListView_w1,10,&_Lvc) ;


_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,11,&_Lvc) ;


_Lvc.pszText = "om" ;


ListView_InsertColumn(hListView_w1,12,&_Lvc) ;


_Lvc.pszText = "w" ;


ListView_InsertColumn(hListView_w1,13,&_Lvc) ;


_Lvc.pszText = "ma" ;


ListView_InsertColumn(hListView_w1,14,&_Lvc) ;


_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,15,&_Lvc) ;


_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,16,&_Lvc) ;


_Lvc.pszText = "per_d" ;


ListView_InsertColumn(hListView_w1,17,&_Lvc) ;


_Lvc.pszText = "per_y" ;


ListView_InsertColumn(hListView_w1,18,&_Lvc) ;


_Lvc.pszText = "MOID" ;


ListView_InsertColumn(hListView_w1,19,&_Lvc) ;


ListView_DeleteColumn(hListView_w1,0) ;


// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent


memset(&_Work,0,sizeof(WORKDATAS)) ;


sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;


return ;
}


Building Chloe.obj.
Building Chloe.res.
Building Filtres.obj.
Building Language.obj.
Building Log.obj.
Building Orbites.obj.
Building Utilities.obj.
Building Window-01.obj.
Building Window-02.obj.
Building Window-03.obj.
Building Window-04.obj.
Building Window-05.obj.
Building Chloe.exe.
POLINK: warning: Realigned section '.idata$5' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$4' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$2' in object 'libgfl.lib(libgfl340.dll)' (from 4 to 1 byte(s)).
Done.
Title: Re: Bug
Post by: Grincheux on July 22, 2020, 09:19:38 PM

Thank Mr Pelle




I added your changes and it WORKS!
Code: [Select]
static void Wnd01_OnCreate(HWND __hWnd)
{
volatile alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;


alignas(int) char _szTmp[1024] ;


    hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;


ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;


ZeroMemory((void *) &_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;


_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;


ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;


_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;

ListView_InsertColumn(hListView_w1,2,&_Lvc) ;


_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;


ListView_InsertColumn(hListView_w1,3,&_Lvc) ;


_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;


ListView_InsertColumn(hListView_w1,4,&_Lvc) ;


_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;


ListView_InsertColumn(hListView_w1,5,&_Lvc) ;


_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;


ListView_InsertColumn(hListView_w1,6,&_Lvc) ;


_Lvc.pszText = "PHA" ;


ListView_InsertColumn(hListView_w1,7,&_Lvc) ;


// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class


// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite


_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;


ListView_InsertColumn(hListView_w1,8,&_Lvc) ;


_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,9,&_Lvc) ;


_Lvc.pszText = "q" ;


ListView_InsertColumn(hListView_w1,10,&_Lvc) ;


_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,11,&_Lvc) ;


_Lvc.pszText = "om" ;


ListView_InsertColumn(hListView_w1,12,&_Lvc) ;


_Lvc.pszText = "w" ;


ListView_InsertColumn(hListView_w1,13,&_Lvc) ;


_Lvc.pszText = "ma" ;


ListView_InsertColumn(hListView_w1,14,&_Lvc) ;


_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;


ListView_InsertColumn(hListView_w1,15,&_Lvc) ;


_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;


ListView_InsertColumn(hListView_w1,16,&_Lvc) ;


_Lvc.pszText = "per_d" ;


ListView_InsertColumn(hListView_w1,17,&_Lvc) ;


_Lvc.pszText = "per_y" ;


ListView_InsertColumn(hListView_w1,18,&_Lvc) ;


_Lvc.pszText = "MOID" ;


ListView_InsertColumn(hListView_w1,19,&_Lvc) ;


ListView_DeleteColumn(hListView_w1,0) ;


// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent


memset(&_Work,0,sizeof(WORKDATAS)) ;


sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;


return ;
}
Quote
Building Chloe.obj.
Building Chloe.res.
Building Filtres.obj.
Building Language.obj.
Building Log.obj.
Building Orbites.obj.
Building Utilities.obj.
Building Window-01.obj.
Building Window-02.obj.
Building Window-03.obj.
Building Window-04.obj.
Building Window-05.obj.
Building Chloe.exe.
POLINK: warning: Realigned section '.idata$5' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$4' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$2' in object 'libgfl.lib(libgfl340.dll)' (from 4 to 1 byte(s)).
Done.


Thanks again
Title: Re: Bug
Post by: Pelle on July 23, 2020, 01:43:39 PM
Good  :)
Title: Re: Bug
Post by: Grincheux on August 04, 2020, 08:01:33 PM
Here is why I asked some help(https://www.mediafire.com/convkey/01e4/2yypk8m6ptf9mw26g.jpg)
Title: Re: Bug
Post by: John Z on August 05, 2020, 11:19:40 AM
Very cool!
A lot of computation I'm sure.


John Z
Title: Re: Bug
Post by: Grincheux on August 05, 2020, 05:46:06 PM
No but big and numerous ephemeris to download. For this picture there are 1 500 000 points.
The most difficult is to choose the bitmap size. In the previous version I had bitmap of 8 000 x 8 000 pixels.
Now I directly create a 1 024 x 1 024 bitmap. It is long to draw, the sqlite tables must be sorted and a VACUMM must be made after every import... For one asteroid I download an ephemeris for the following dates
1-2000-2050
2-2000-2010
3-2010-2020
4-2020-2030
5-2030-2040
6-2040-2050
7-2000-2020
8-2000-2030
9-2000-2040


Each ephemeris has 90022 line of datas and is 23Mb in size...
Perhaps I could be faster if datas where not stored as reals but as integers.
I use SetPixel to draw the orbite.


Thank you Pelle & John for your comments.