Typical pattern, we cannot allocate memories. as a typical pattern, we cannot allocate memories.
One of the answers is using "new".The thread doesn't wait for the next line as a process well even in for-loop.
--- Execution 001 starts. ----
Sun Aug 08 14:48:16 202 i 3 lines|00000000| i 3 lines_2D|00000000|ullptr=|00000000|.810090|.|0000001d|Sun Aug 08 14:48:16 202 We can't allcaote for lines memories. they are NULL after allocation loop.|0000001d|
--- Execution 001 ends. ----
int mDisplayControls_wmpaint_display_threeD_proc ( HWND hWnd, HDC hDC, PAINTSTRUCT* ps, UINT uMsg, WPARAM wParam, LPARAM lParam ) { err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: starts.\r\n"); static int call_once_m = 0; int a = 0; float x1 = 0.0f, y1 = 0.0f, z1 = 0.0f; float x2 = 0.0f, y2 = 0.0f, z2 = 0.0f; if ( AXEX_2D_001 == NULL ) { err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: middle: 002-01\r\n"); a = initialize_vAxex_2D_002 (); err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: middle: 002-02\r\n"); } err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: middle: 002-03-01.\r\n"); line_index = 12; err_msg_001("lines |%p| \r\n", lines ); if ( call_once_m == 0 ) { err_msg_001 ("malloc: lines: |%p| |%p| ends.\r\n", lines, lines_2D ); lines = (vLine**) realloc ( lines, sizeof (vLine*) * line_index ); if ( lines == NULL ) { err_msg_001 ("lines_2D |%p| \r\n" , lines); exit(-1); } lines_2D = (vLine**) realloc ( lines_2D, sizeof (vLine*) * line_index ); if ( lines_2D == NULL ) { err_msg_001 ("lines_2D |%p| \r\n" , lines_2D); exit(-1); } err_msg_001 ("malloc: lines: |%p| |%p| ends.\r\n", lines, lines_2D ); for ( int i = 0; i<line_index; i++ ) { err_msg_001("i %d lines|%p| i %d lines_2D|%p| nullptr=|%p|\r\n", i, lines[i], i, lines_2D[i], nullptr); if ( lines[i] != nullptr ) { lines[i] = memorizevLine ( memorizevPoint( 0.0f, 0.0f, 0.0f ), memorizevPoint( 0.0f, 0.0f, 0.0f ) ); } if ( lines_2D[i] != nullptr ) { lines_2D[i] = memorizevLine ( memorizevPoint( 0.0f, 0.0f, 0.0f ), memorizevPoint( 0.0f, 0.0f, 0.0f ) ); } err_msg_001("i %d lines|%p| i %d lines_2D|%p|\r\n", i, lines[i], i, lines_2D[i]); if ( lines[i] == nullptr && lines_2D[i] == nullptr ) { err_msg_001("We can't allcaote for lines memories. they are NULL after allocation loop.\r\n" ); exit(-1); } err_msg_001("i %d lines|%p| i %d lines_2D|%p|\r\n", i, lines[i], i, lines_2D[i]); } err_msg_001 ("malloc: lines: |%p| |%p| has finished. \r\n", lines, lines_2D ); call_once_m = 1; } err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: middle: 002-03-02.\r\n"); for ( int i = 3; i<line_index; i++ ) { err_msg_001("m-02-01: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p| AXEX_2D_001[%d]=|%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D, (i - 1) / 3, AXEX_2D_001[ (i - 1) / 3 ] ); // right arrow is different, we don't know that reason. x1 = AXEX_2D_001[ (i - 1) / 3 ]->center->x; y1 = AXEX_2D_001[ (i - 1) / 3 ]->center->y; z1 = AXEX_2D_001[ (i - 1) / 3 ]->center->z; err_msg_001("m-02-01-01: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); x2 = x1 + AXEX_2D_001[ (i - 1) / 3 ]->right->x * 30.0f; y2 = y1 + AXEX_2D_001[ (i - 1) / 3 ]->right->y * 30.0f; z2 = z1 + AXEX_2D_001[ (i - 1) / 3 ]->right->z * 30.0f ; err_msg_001("m-02-01-02: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); lines[i]->setLine ( x1, y1, z1, x2, y2, z2 ) ; lines_2D[i]->setLine ( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f ); err_msg_001("m-02-01-03: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); i++; err_msg_001("m-02-02: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); x1 = AXEX_2D_001[ (i - 1) / 3 ]->center->x; y1 = AXEX_2D_001[ (i - 1) / 3 ]->center->y; z1 = AXEX_2D_001[ (i - 1) / 3 ]->center->z; x2 = x1 + AXEX_2D_001[ (i - 1) / 3 ]->up->x * 30.0f; y2 = y1 + AXEX_2D_001[ (i - 1) / 3 ]->up->y * 30.0f; z2 = z1 + AXEX_2D_001[ (i - 1) / 3 ]->up->z * 30.0f; lines[i]->setLine ( x1, y1, z1, x2, y2, z2 ) ; lines_2D[i]->setLine ( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f ); err_msg_001("m-02-02: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); i++; err_msg_001("m-02-03: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); x1 = AXEX_2D_001[ (i - 1) / 3 ]->center->x; y1 = AXEX_2D_001[ (i - 1) / 3 ]->center->y; z1 = AXEX_2D_001[ (i - 1) / 3 ]->center->z; x2 = x1 + AXEX_2D_001[ (i - 1) / 3 ]->depth->x * 30.0f; y2 = y1 + AXEX_2D_001[ (i - 1) / 3 ]->depth->y * 30.0f; z2 = z1 + AXEX_2D_001[ (i - 1) / 3 ]->depth->z * 30.0f ; lines[i]->setLine ( x1, y1, z1, x2, y2, z2 ) ; lines_2D[i]->setLine ( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f ); err_msg_001("m-02-03: i %d line_index = %d lines[%d]=|%p|/ lines |%p| lines2D[%d] =|%p| / lines2D |%p|\r\n", i, line_index, i, lines[i], lines, i, lines_2D[i], lines_2D ); } printf("m-02: line_index = %d lines |%p| lines2D |%p|\r\n", line_index, lines, lines_2D ); int b = convert_model_lines( lines, lines_2D, 3, line_index ); printf("m-03: line_index = %d lines |%p| lines2D |%p|\r\n", line_index, lines, lines_2D ); // Display axes from 4 to 15 for ( int i = 3; i<line_index; i++ ) { GamePaint_011( hDC, lines_2D[i] ); } err_msg_001("mDisplayControls_wmpaint_display_threeD_proc: ends.\r\n"); } correct: