User Tools

Site Tools


cpp:exception_rethrow

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:exception_rethrow [2019/05/06 08:41] – [Διαχείριση εξαίρεσης και παραγωγή νέας εξαίρεσης κατά τη διαχείριση της] gthanoscpp:exception_rethrow [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 42: Line 42:
     for(int row=0; row<height; row++) {     for(int row=0; row<height; row++) {
       for(int col=0; col<width; col++) {       for(int col=0; col<width; col++) {
-        cin >> str;+        in >> str;
         red = (unsigned char) atoi(str.c_str());         red = (unsigned char) atoi(str.c_str());
-        cin >> str;+        in >> str;
         green = (unsigned char) atoi(str.c_str());         green = (unsigned char) atoi(str.c_str());
-        cin >> str;+        in >> str;
         blue = (unsigned char) atoi(str.c_str());         blue = (unsigned char) atoi(str.c_str());
         raster[row][col] = 0;         raster[row][col] = 0;
Line 73: Line 73:
   try{   try{
     imgptr = new PPMImage(argv[1]);     imgptr = new PPMImage(argv[1]);
 +    delete imgptr;
   }   }
   catch(ios_base::failure &fex) {   catch(ios_base::failure &fex) {
Line 79: Line 80:
   catch(bad_alloc &ex) {   catch(bad_alloc &ex) {
     cerr << "Memory allocation failure!\n";     cerr << "Memory allocation failure!\n";
-    if (imgptr!=nullptr)+    if (imgptr!=nullptr) {
       cerr << "imgptr != nullptr\n";       cerr << "imgptr != nullptr\n";
 +      delete imgptr;
 +    }
     else     else
       cerr << "imgptr == nullptr\n";       cerr << "imgptr == nullptr\n";
   }   }
-  delete imgptr; 
   return 0;   return 0;
 } }
Line 98: Line 100:
 </code> </code>
  
-Από τον παραπάνω κώδικα μπορούμε να συμπεράνουμε τα εξής: +Από τον παραπάνω κώδικα μπορούμε να συμπεράνουμε ότι εφόσον παράγεται ένα //exception// o δείκτης //imgptr// μέσα στο //catch block// της συνάρτησης //main// έχει την αρχική του τιμή, δηλαδή **nullptr**. Αυτό είναι λογικό με βάση τις αρχές του //stack unwinding// που συζητήσαμε προηγούμενα.
-  - Εφόσον παράγεται ένα //exception// o δείκτης //imgptr// μέσα στο //catch block// της συνάρτησης //main// έχει την αρχική του τιμή, δηλαδή **nullptr**. Αυτό είναι λογικό με βάση τις αρχές του //stack unwinding// που συζητήσαμε προηγούμενα. +
-  - Εάν εφαρμόσω τον τελεστή **delete** σε ένα δείκτη που έχει την τιμή **nullptr**, δεν παράγεται κάποιου είδους //exception//, αλλά ο κώδικας συνεχίζει κανονικά. +
 ===== Παραλλαγή του παραπάνω παραδείγματος ===== ===== Παραλλαγή του παραπάνω παραδείγματος =====
  
cpp/exception_rethrow.1557132115.txt.gz · Last modified: 2019/05/06 07:41 (external edit)