Waitrud Weber’s blog

things and reminders for memories

3d: WindowsAPI: Windows-make: How do we face memories problem:

(20200401)
Memory problem is sure, and easily solve it and hit the rate of it.
I changed the below:

1. If this_calc is still static,
2. If Screen->C is still static,
3. Program doesn't free any other vPoint on the vScreen::calculation_up_UV ();

4. Use (vPoint *) in the calculation steps.

-----

Compilations:

1:

2:

3:

4:

5:

----

 

1: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200329-001.zip
2: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200330-001.zip
3: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200331-001.zip
4: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200401-001.zip
5: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200403-001.zip
6:double file: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200404-001.zip
7: shell: https://github.com/WaitrudWeber/source_zip/blob/master/filerecover-001.zip
8: double line: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200410-001.zip
(clipboard-20200410-001.png)
9: compilation: https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200411-001.zip
10: double file:  

https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200412-001.zip

11:  
   

 

---

(20200401)
We consider, remove "put_memories( vPoint* p);".

---

(20200410)
vPoints Calculations:
All functions return not as (vPoint) as (vPoint*):

vPoint* vIntersection::Intersect ( vTriangle tri, vPoint eye, vPoint ray ) {

	vCalculation *cal = nullptr;

	cal = new vCalculation ();

	log_msg_003("eye= ");
	eye.print();
	log_msg_003("ray= ");
	ray.print();

	vPoint* n = tri.getNormal ();
	double d = -n->x*tri.p1.x - n->y*tri.p1.y - n->z * tri.p1.z;
	double depth = ( -d - n->x*eye.x - n->y*eye.y - n->z*eye.z ) / ( n->x*ray.x + n->y*ray.y + n->z*ray.z );

	vPoint scale_ray = cal->scale( ray, depth);
	vPoint* intersection = cal->add( eye, scale_ray);

	log_msg_003("depth=%f\r\n", depth);

	delete( cal );

	return intersection;
}

----

(20200411) 

All we changed is return vPoint* not vPoint:
Hard work and we found double line again: (clipboard-20200410-001.png)
Memory-Allocation was printed well but Program Stopped suddenly.

https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200410-001.zip
.\vCalculation.cpp  Sat Apr 11 01:31:51 2020

  1 :#include 
  2 :#include 
  3 :#include 
  4 :#include  // ADD: 20200125
  5 :
  6 :#include "array_counter.h"	// ADD: 20200125
  7 :#include "sender.h"			// ADD: 20200125
  8 :#include "Print.h"			// ADD: 20200125
  9 :
 10 :#include "vPoint.h"
 11 :#include "vLine.h"
 12 :
 13 :#include "vCalculation.h"
 14 :
 15 :
 16 :int dummy_vPoint_max = 0;
 17 :int dummy_vPoint_index = 0;
 18 :vPoint** dummy_vPoint = nullptr;
 19 :vPoint* dummy_p = nullptr;
 20 :vPoint* dummy_pp = nullptr;
 21 :int once_memorized = 0;
 22 :
 23 :void put_memories( vPoint* dummy_vPoint );
 24 :vPoint* memorizevPoint( float a, float b, float c );
 25 :void print_point_memories ();
 26 :void put_points( vPoint* p );
 27 :void garbage_memories () ;
 28 :void free_point ( vPoint* p ) ;
 29 :void free_point_001 ( vPoint* p ) ;
 30 :
 31 ://
 32 ://
 33 ://
 34 ://
 35 ://
 36 :void free_point ( vPoint* p ) {
 37 :	printf("free_point starts. |%p| dummy_vPoint_index|%d|\r\n", p, dummy_vPoint_index);
 38 :
 39 :	dummy_vPoint_index--;
 40 :	for( int i=dummy_vPoint_index; i>=0; i-- ) {
 41 :		if ( dummy_vPoint[i] == p ) {
 42 :			// flip
 43 :			vPoint* w_p = dummy_vPoint[dummy_vPoint_index];
 44 :			dummy_vPoint[i] = dummy_vPoint[dummy_vPoint_index];
 45 :			dummy_vPoint[dummy_vPoint_index] = w_p;
 46 :		}
 47 :	}
 48 :
 49 :	printf("free_point ends. |%p| dummy_vPoint_index{%d}\r\n", p, dummy_vPoint_index);
 50 :	// exit(-1);
 51 :}
 52 :
 53 ://
 54 ://
 55 ://
 56 ://
 57 ://
 58 :void free_point_001 ( vPoint* p ) {
 59 :	printf("point |%p|\r\n", p);
 60 :	delete( p );
 61 :	printf("delete |%p|\r\n", p);
 62 :	// debug 20200213
 63 :	//if ( p == nullptr ) exit(-1);
 64 :	//exit(-1);
 65 :	vPoint *pp = new vPoint();
 66 :	printf("point |%p|\r\n", pp);
 67 :	delete(pp);
 68 :	printf("point |%p|\r\n", pp);
 69 :	// exit(-1);
 70 :
 71 :	if ( once_memorized ) delete(dummy_pp);
 72 :
 73 :	if ( dummy_pp == nullptr && once_memorized ) {
 74 :		printf("dummy_pp=%p\r\n", dummy_pp);
 75 :		exit(-1);
 76 :	}
 77 :
 78 :	dummy_pp = new vPoint();
 79 :	once_memorized = 1;
 80 :}
 81 :
 82 :// 
 83 :// int dummy_vPoint_max = 0;
 84 :// int dummy_vPoint_index = 0;
 85 :// vPoint** dummy_vPoint = nullptr;
 86 :// vPoint* dummy_p = nullptr;
 87 :// 
 88 :void put_points( vPoint* p ) {
 89 :
 90 :	if ( dummy_vPoint_index >= dummy_vPoint_max ) {
 91 :		if ( dummy_vPoint_index == 0 ) dummy_vPoint_max = 8; // initialization
 92 :		dummy_vPoint_index *= 2;
 93 :		dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max );
 94 :		printf("dummy_vPoint_max = %d \r\n", dummy_vPoint_max );
 95 :	}
 96 :
 97 :	dummy_vPoint[ dummy_vPoint_index ] = (vPoint*)p;
 98 :	dummy_vPoint_index++;
 99 :}
100 :
101 ://
102 :float vCalculation::dot ( vPoint p1, vPoint p2) {
103 :	float dot;
104 :
105 :	this->dot( p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, &dot );
106 :
107 :	return dot;
108 :}
109 :
110 :
111 ://
112 ://
113 ://
114 ://
115 ://
116 :void vCalculation::dot ( float x1, float y1, float z1, float x2, float y2, float z2, float* dot ) {
117 :
118 :	*dot = x1*x2 + y1*y2 + z1*z2;
119 :}
120 :
121 ://
122 ://
123 ://
124 ://
125 ://
126 :vPoint* vCalculation::add ( vPoint* p1, vPoint* p2) {
127 :	printf("vCalculation::add starts\r\n");
128 :	vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f);
129 :	add( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) );
130 :
131 :	// comment out at 20191217
132 :	// put_memories( p3 );
133 :
134 :	printf("vCalculation::add returns |%p| \r\n", p3);
135 :	return p3;
136 :}
137 :
138 ://
139 ://
140 ://
141 ://
142 ://
143 :void vCalculation::add ( vPoint* p1, vPoint* p2, vPoint* p3) {
144 :	add( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) );
145 :}
146 :
147 :
148 ://
149 ://
150 ://
151 ://
152 ://
153 :void vCalculation::cross ( vPoint* p1, vPoint* p2, vPoint* p3) {
154 :	cross( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) );
155 :}
156 :
157 ://
158 ://
159 ://
160 ://
161 ://
162 :vPoint* vCalculation::cross ( vPoint p1, vPoint p2) {
163 :
164 :	vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f );
165 :
166 :	cross( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(p3->x), &(p3->y), &(p3->z) );
167 :
168 :	return p3;
169 :}
170 :
171 ://
172 ://
173 ://
174 :vPoint* vCalculation::cross ( vPoint* p1, vPoint* p2) {
175 :
176 :	vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f );
177 :
178 :	cross( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) );
179 :
180 :	return p3;
181 :}
182 :
183 :// 0, 0, 1  x  1, 0, 0 = 0, -1, 0     -> -z1*x2
184 :// 1, 0, 0  x  0, 0, 1 = 0,  1, 0     ->  x1*z2
185 :
186 :// 0, 1, 0  x  1, 0, 0 = 0, 0,  1
187 :// 1, 0, 0  x  0, 1, 0 = 0, 0, -1
188 ://
189 :void vCalculation::cross ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) {
190 :
191 :	*x3 = z1*y2 - y1*z2;
192 :	*y3 = x1*z2 - z1*x2;
193 :	*z3 = y1*x2 - x1*y2;
194 :
195 :}
196 :
197 ://
198 ://
199 ://
200 ://
201 :vPoint* vCalculation::subtract ( vPoint* p1, vPoint* p2) {
202 :	printf("vPoint* vCalculation::subtract starts p1|%p| p2|%p|\r\n", p1, p2);
203 :
204 :	vPoint* result = nullptr;
205 :	result = memorizevPoint( 0.0f, 0.0f, 0.0f);
206 :	subtract( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &result->x, &result->y, &result->z );
207 :
208 :// commented out 20200410
209 ://	put_memories ( (vPoint*)result );
210 :
211 :	printf("vPoint* vCalculation::subtract ends and returns |%P|\r\n", result);
212 :	return result;
213 :}
214 :
215 ://
216 ://
217 ://
218 ://
219 ://
220 :void vCalculation::Print_Point_Memories () {
221 :
222 :	print_point_memories ();
223 :}
224 :
225 :// Qualfied: we could use %p on printf.
226 ://
227 ://
228 ://
229 ://
230 :void print_point_memories () {
231 :
232 :	vPoint* p = nullptr;
233 :
234 :	for( int i=0; i<dummy_vPoint_index; i++ ) {
235 :		p = dummy_vPoint[ i ];
236 :		printf ("i: %3d p: %p\r\n", i, p );
237 :	}
238 :
239 :}
240 :
241 :
242 :// Recreated: 20200218
243 ://
244 ://
245 ://
246 ://
247 :vPoint* memorizevPoint( float a, float b, float c ) {
248 :	printf("memorizevPoint starts: %f %f %f dummy_vPoint_index %d dummy_vPoint_max %d\r\n", a, b, c, dummy_vPoint_index, dummy_vPoint_max);
249 :
250 :	if ( dummy_vPoint_index < dummy_vPoint_max ) {
251 :		if ( dummy_vPoint[dummy_vPoint_index] != nullptr ) {
252 :			dummy_vPoint_index++;
253 :			if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) {
254 :				dummy_vPoint_max = dummy_vPoint_max * 2;
255 :				dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max );
256 :			}
257 :			printf("aReuse: %d/%d dummy_vPoint=%p\r\n", dummy_vPoint_index, dummy_vPoint_max, dummy_vPoint[dummy_vPoint_index - 1]);
258 :			//exit(-1);
259 :			return dummy_vPoint[dummy_vPoint_index - 1];
260 :		}
261 :	}
262 :
263 :	// Mallocation:
264 :	if ( dummy_vPoint_index == 0 ) {
265 :		dummy_vPoint_max = 8;
266 :		dummy_vPoint = (vPoint**) malloc ( sizeof(vPoint*) * dummy_vPoint_max );
267 :	}
268 :
269 :	// Rallocation:
270 :	if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) {
271 :		dummy_vPoint_max = dummy_vPoint_max * 2;
272 :		dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max );
273 :	}
274 :
275 :
276 :	if ( dummy_vPoint[dummy_vPoint_index] == nullptr ) {
277 :		dummy_vPoint[dummy_vPoint_index] = new vPoint ( a, b, c );
278 :	}
279 :	dummy_vPoint_index++;
280 :
281 :	printf("memorizevPoint returns: %p: dummy_vPoint_index %d dummy_vPoint_max %d\r\n", dummy_vPoint[dummy_vPoint_index - 1], dummy_vPoint_index, dummy_vPoint_max );
282 :	return dummy_vPoint[dummy_vPoint_index - 1];
283 :}
284 :
285 ://
286 ://
287 ://
288 ://
289 :void put_memories ( vPoint* result ) {
290 :
291 :	printf("Do not use: put_memories\r\n");
292 :	exit(-1);
293 :
294 :
295 :	if ( dummy_vPoint_index == 0 ) {
296 :		dummy_vPoint_max = 8;
297 :		dummy_vPoint = (vPoint**) malloc ( sizeof(vPoint*) * dummy_vPoint_max );
298 :	}
299 :
300 :	if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) {
301 :		dummy_vPoint_max = dummy_vPoint_max * 2;
302 :		dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max );
303 :	}
304 :
305 :	dummy_vPoint[ dummy_vPoint_index ] = result;
306 :	dummy_vPoint_index++;
307 :}
308 :
309 ://
310 ://
311 ://
312 ://
313 ://
314 :void garbage_memories () {
315 :	for( int i=0; i<dummy_vPoint_index; i++ ) {
316 :		log_msg_003("|%3d|%p|\r\n", i, dummy_vPoint[i] );
317 :		if ( dummy_vPoint[i] == nullptr ) {
318 :			log_msg_003("we found freed memory.\r\n");
319 :			exit(-1);
320 :		}
321 :	}
322 :
323 :	// 20200126 temporalily we quit.
324 :	if ( dummy_vPoint_index > 0 ) {
325 :		printf("dummy_vPoint_index=|%3d|\r\n", dummy_vPoint_index );
326 :		//exit(-1);
327 :	}
328 :}
329 :
330 ://
331 ://
332 ://
333 ://
334 :vPoint* vCalculation::subtract ( vPoint p1, vPoint p2) {
335 :	vPoint *result;
336 :	printf("vPoint vCalculation::subtract:\r\n" );
337 ://	vPoint* a_result = nullptr;
338 ://	result = (vPoint*) memorizevPoint( 0.0f, 0.0f, 0.0f);
339 ://	subtract( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z) );
340 :
341 ://	printf("vPoint vCalculation::subtract ends: \r\n" );
342 ://	return *result;
343 :
344 :	result = memorizevPoint ( 0.0f, 0.0f, 0.0f );
345 :	subtract(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z));
346 ://	return *(memorizevPoint( 0.0f, 0.0f, 0.0f));
347 :
348 :	printf("vPoint vCalculation::subtract ends: %p\r\n", result );
349 :	return result;
350 :}
351 :
352 ://
353 ://
354 ://
355 ://
356 :void vCalculation::subtract ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) {
357 :
358 :	*x3 = x1 - x2;
359 :	*y3 = y1 - y2;
360 :	*z3 = z1 - z2;
361 :
362 :}
363 :
364 ://
365 ://
366 ://
367 ://
368 ://
369 :void vCalculation::add ( vPoint p1, vPoint p2, vPoint* p3 ) {
370 :	printf("vPoint vCalculation::add: starts. |%p| |%p| |%p|\r\n", &p1, &p2, p3);
371 :
372 :	add( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(p3->x), &(p3->y), &(p3->z) );
373 :
374 :	printf("vPoint vCalculation::add: sets |%p|.\r\n", p3);
375 :}
376 :
377 ://
378 ://
379 ://
380 ://
381 ://
382 :vPoint* vCalculation::add ( vPoint p1, vPoint p2) {
383 :	printf("vPoint vCalculation::add: starts. |%p| |%p|\r\n", &p1, &p2);
384 :
385 :	vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f);
386 :
387 :	add( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z) );
388 :
389 :	printf("vPoint vCalculation::add: returns |%p|.\r\n", result);
390 :	return result;
391 :}
392 :
393 ://
394 ://
395 ://
396 ://
397 ://
398 :void vCalculation::add ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) {
399 :
400 :	*x3 = x2 + x1;
401 :	*y3 = y2 + y1;
402 :	*z3 = z2 + z1;
403 :
404 :}
405 :
406 :// expand
407 :// scale
408 :// strech
409 :// enlarge
410 :// magnification
411 :vPoint* vCalculation::scalize ( vPoint* p1, float w_scale) {
412 :
413 ://	vPoint* result = (vPoint*) malloc (sizeof(vPoint) * 1 );
414 :	vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f);
415 :
416 :	scale ( p1->x, p1->y, p1->z, w_scale, &(result->x), &(result->y), &(result->z) );
417 :
418 :	put_memories ( result );
419 :
420 :	return result;
421 :}
422 :
423 ://
424 ://
425 ://
426 ://
427 ://
428 :vPoint* vCalculation::scale ( vPoint* p1, float w_scale, vPoint* result ) {
429 :	printf("vPoint* vCalculation::scale |%p| |%f| |%p|\r\n",  p1, w_scale, result);
430 :
431 :	scale ( p1->x, p1->y, p1->z, w_scale, &(result->x), &(result->y), &(result->z) );
432 :
433 :	put_memories ( result );
434 :
435 :	printf("vPoint* vCalculation::scale |%p|\r\n", result);
436 :	return result;
437 :}
438 :
439 :
440 ://
441 ://
442 ://
443 ://
444 ://
445 ://
446 :void vCalculation::scale ( vPoint* p1, float w_scale ) {
447 :	printf("vCalculation::scale starts.\r\n");
448 :
449 :	p1->x *= w_scale;
450 :	p1->y *= w_scale;
451 :	p1->z *= w_scale;
452 :
453 :	printf("vCalculation::scale ends.\r\n");
454 :}
455 :
456 ://
457 ://
458 ://
459 ://
460 ://
461 :vPoint* vCalculation::scale ( vPoint p1, float w_scale ) {
462 :	printf("vCalculation::scale starts. |%p| %f\r\n", &p1, w_scale);
463 :
464 :	vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f );
465 :	
466 :
467 :	scale ( p1.x, p1.y, p1.z, w_scale, &(result->x), &(result->y), &(result->z) );
468 :
469 :	printf("vCalculation::scale ends. return |%p|\r\n", &result);
470 :	return result;
471 :}
472 :
473 ://
474 ://
475 ://
476 ://
477 :void vCalculation::scale ( float x1, float y1, float z1, float scale, float* x3, float* y3, float* z3) {
478 :
479 :	*x3 = scale * x1;
480 :	*y3 = scale * y1;
481 :	*z3 = scale * z1;
482 :
483 :}
484 :
485 ://
486 ://
487 ://
488 ://
489 ://
490 :void vCalculation::normal ( vPoint* p1 ) {
491 :
492 :	double scale = p1->x*p1->x + p1->y*p1->y + p1->z*p1->z;
493 :	scale = sqrt( scale );
494 :
495 :	p1->x = (( double ) p1->x) / scale;
496 :	p1->y = (( double ) p1->y) / scale;
497 :	p1->z = (( double ) p1->z) / scale;
498 :}
499 :
500 ://
501 ://
502 ://
503 ://
504 :vPoint* vCalculation::normal ( vPoint p1 ) {
505 :
506 :	vPoint* p2 = memorizevPoint( 0.0f, 0.0f, 0.0f );
507 :	// double scal = 0.0;
508 :	// scal = normal( p1.x, p1.y, p1.z, &p2.x, &p2.y, &p2.z );
509 :
510 :	normal( p1.x, p1.y, p1.z, &(p2->x), &(p2->y), &(p2->z) );
511 :
512 :	return p2;
513 :}
514 :
515 ://
516 ://
517 ://
518 ://
519 :double vCalculation::normal ( float x1, float y1, float z1, float* x2, float* y2, float* z2 ) {
520 :
521 :	double scale = x1*x1 + y1*y1 + z1*z1;
522 :	scale = sqrt( scale );
523 :
524 :	double x3 = (( double ) x1) / scale;
525 :	double y3 = (( double ) y1) / scale;
526 :	double z3 = (( double ) z1) / scale;
527 :
528 :	*x2 = x3;
529 :	*y2 = y3;
530 :	*z2 = z3;
531 :
532 :	return scale;
533 :}
534 :
535 ://
536 ://
537 ://
538 ://
539 :double vCalculation::length ( vPoint lp ) {
540 :
541 :	return length ( lp.x, lp.y, lp.z );
542 :}
543 :
544 ://
545 ://
546 ://
547 ://
548 :double vCalculation::length ( vPoint* lp ) {
549 :
550 :	return length ( lp->x, lp->y, lp->z );
551 :}
552 :
553 ://
554 ://
555 ://
556 ://
557 :double vCalculation::length ( float x1, float y1, float z1) {
558 :
559 :	double scale = x1*x1 + y1*y1 + z1*z1;
560 :	scale = sqrt( scale );
561 :
562 :	return scale;
563 :}
564 :
565 ://
566 ://
567 ://
568 ://
569 ://
570 :vLine* vCalculation::put_line( vLine* be_set, vLine* l1 ) {
571 :	be_set = l1;
572 :	// the below error 
573 :	// l1->p1->print();
574 :	// the below error 
575 :	// be_set->p1->print();
576 :
577 :	return l1;
578 :}
579 :
580 ://
581 ://
582 :// copy all points and would liket to refer to points at 20190213
583 ://
584 :vLine** vCalculation::Lines_from_Mesh ( vPoint* points, int** numbering, int num_patches, int base_num_patches) {
585 :	vLine** p_result = nullptr;
586 :	vLine** result = nullptr;
587 :	//20180214
588 :	int c = num_patches;
589 :	int d_number = 0;
590 :	vPoint* end_to_start = nullptr;
591 :
592 :	printf("num_patches %d base_num_patches %d\r\n", num_patches, base_num_patches);
593 :
594 :	for( int i=0; i<c; i++ ) {
595 :		int* num_p = *( numbering + i );
596 :		//20180214
597 ://		int d = sizeof( num_p ) / sizeof( int* );
598 :		int d = base_num_patches;
599 :
600 :		p_result = ( vLine** ) malloc ( sizeof(vLine**) * d );
601 :		d_number += d;
602 :		result = ( vLine** ) realloc ( result, sizeof( vLine** ) * d_number );
603 :
604 :		for( int j=0; j<d; j++ ) {
605 :			int number = *( num_p + j );
606 :			vLine* p_line = *( p_result + j );
607 :			put_point( p_line->p1, points + number );
608 :
609 :			if ( j == 0 ) {
610 :				end_to_start = points + number;
611 :			} else {
612 :				put_point( p_line->p2, points + number - 1 );
613 :			}
614 :		}
615 :
616 :		vLine* last = *( p_result + d - 1 );
617 :		put_point( last->p2, end_to_start );
618 :
619 :		for( int j= d_number - d; j<d_number; j++ ) {
620 :			put_line( *(result + j), *(p_result + j - d_number + d) );
621 :		}
622 :	}
623 :
624 :	Print_Lines ( result, d_number );
625 :	printf("end of Lines_from_Mesh d_number %d\r\n", d_number);
626 :
627 :	// cast vPoint** -> vPoint*
628 :	put_memories( (vPoint*) result );
629 :
630 :	return result;
631 :}
632 :
633 ://
634 ://
635 ://
636 ://
637 ://
638 :void vCalculation::Print_Lines ( vLine** array, int num ) {
639 :
640 :	for ( int i=0; i<num; i++ ) {
641 :		vLine* line = *( array + i );
642 :		line->print();
643 :	}
644 :
645 :}
646 :
647 ://
648 ://
649 ://
650 ://
651 ://
652 :void vCalculation::put_point( vPoint* lp1, vPoint* points_number ) {
653 :	printf( "start of put_point\r\n" );
654 :	points_number->print();
655 :	lp1 = points_number;
656 :	lp1->print();
657 :	printf( "end of put_point\r\n" );
658 :	// exit(-1);
659 :}
660 :
661 :
----
void wButtonController::drawButtons ( HDC hdc ): Starts
AryButton 0 = 0
AryButton 1 = 0
AryButton 2 = 1
AryButton 3 = 0
AryButton 4 = 0
AryButton 5 = 0
AryButton 6 = 0
AryButton 7 = 0
AryButton 8 = 0
void wButtonController::drawButtons ( HDC hdc ): Ends
wmpaint_display_threeD_proc_002:
memorized_CurveLines=0
memorized_CurveLines=0
WM_MESSG 004: 15 *(p_evt->uMsg):1999084584 uMsg:15 p_evt->uMsg: 2685472 &uMsg: 2686020
WM_PAINT 005: 15 *(p_evt->uMsg):1999084584 uMsg: 15
WM_PAINT 006: 15 *(p_evt->uMsg):1999084584 uMsg: 15
WM_MESSG 000: hWnd 459572: uMsg 257: wParam 13: lParam -1071906815: canvas 4366736: btc 4366752: *(p_evt->uMsg) 257:
WM_MESSG 003: 257 *(p_evt->uMsg):257
wButtonController::Process: 257 / 15<-WM_PAINT wParam 13 lParam -1071906815 this->event->uMsg:2686208 *(this->event->uMs
g)=257
wButtonController::ProcessWmKeyup: Starts:initialize 2
003:
vScreen::calculation_up_UV () starts.
this->eye= p( 500.000000, 500.000000, -500.000000)
lookat= p( 0.000000, 0.000000, 0.000000)
vPoint vCalculation::subtract:
memorizevPoint starts: 0.000000 0.000000 0.000000 dummy_vPoint_index 0 dummy_vPoint_max 0
memorizevPoint returns: 03A61230: dummy_vPoint_index 1 dummy_vPoint_max 8