cpp:dynamic_memory

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
cpp:dynamic_memory [2017/04/11 10:00]
gthanos created
cpp:dynamic_memory [2017/04/11 10:20]
gthanos [Έλεγχος δέσμευσης μνήμης]
Line 9: Line 9:
 </WRAP> </WRAP>
  
-Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την δέσμευση μνήμης και την αρχικοποίηση ενός πίνακα. Δείτε το παρακάτω παράδειγμα χρήσης του τελεστή **new**.+Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την δέσμευση μνήμης και την αρχικοποίηση ενός πίνακα. 
  
-<code dynamicMemory c++>+Σε αναλογία με τον τελεστή **new** ο τελεστής **delete** για την αποδέσμευση μνήμης έχει και αυτός δύο μορφές (**delete** και **delete[]**). Η πρώτη χρησιμοποιείται για την αποδέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την αποδέσμευση μνήμης ενός πίνακα. Δείτε το παρακάτω παράδειγμα χρήσης των τελεστών **new** και **delete**. 
 + 
 +<code c++ dynamicMemory.cpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
Line 36: Line 38:
 Για βασικούς τύπους δεδομένων επίσης μπορείτε κατά την χρήση του τελεστή **new** να αρχικοποιήσετε τη μεταβλητή ως εξής: Για βασικούς τύπους δεδομένων επίσης μπορείτε κατά την χρήση του τελεστή **new** να αρχικοποιήσετε τη μεταβλητή ως εξής:
  
-<code dynamicMemory c++>+<code c++ dynamicMemory.cpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
Line 47: Line 49:
 </code> </code>
  
 +===== Έλεγχος δέσμευσης μνήμης =====
 +
 +Κατά τη δέσμευση μνήμης δεν είναι απαραίτητο να γίνονται οι έλεγχοι για το κατά πόσο η δέσμευση απέτυχε. Στην περίπτωση που η δέσμευση μνήμης αποτύχει τότε παράγεται ένα //exception// τύπου ''bad_alloc'' το οποίο καλούμαστε να διαχειριστούμε, διαφορετικά το πρόγραμμα θα τερματίσει. Εάν δεν επιθυμούμε ο τελεστής **new** να πετάξει //exception// θα πρέπει να αλλάξουμε τον τρόπο κλήσης προσθέτοντας τη δεσμευμένη έκφραση ''(nothrow)'' αμέσως μετά τον τελεστή **new** και να ελέγξουμε την επιστρεφόμενη τιμή ως εξής:
 +
 +<code c++ dynamicMemory.cpp>
 +#include <iostream>
 +using namespace std;
 +
 +int main () {
 +  int *num, *p;
 +  num = new int;
 +  cout << "Enter number of elements: ";
 +  cin >> *num;
 +  p = new (nothrow) int[*num];
 +  if(p==NULL) {
 +    cout << "Allocation failure!\n";
 +    return 0;
 +  }
 +  for(int i=0; i<*num; i++) {
 +    cout << "Next integer: ";
 +    cin >> p[i];
 +  }
 +  for(int i=0; i<*num; i++) {
 +    cout << p[i] << "\t";
 +  }
 +  cout << endl;
 +  delete []p;
 +  delete num;
 +}
 +</code>
  
  
  
cpp/dynamic_memory.txt · Last modified: 2021/04/27 05:01 (external edit)