This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
cpp:dynamic_memory [2017/04/11 10:14] gthanos |
cpp:dynamic_memory [2017/06/08 06:22] gthanos |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| </ | </ | ||
| - | Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την δέσμευση μνήμης και την αρχικοποίηση ενός πίνακα. Δείτε το παρακάτω παράδειγμα χρήσης του τελεστή **new**. | + | Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την δέσμευση μνήμης και την αρχικοποίηση |
| + | |||
| + | Σε αναλογία με τον τελεστή **new** ο τελεστής **delete** για την αποδέσμευση μνήμης έχει και αυτός δύο μορφές (**delete** και **delete[]**). Η πρώτη χρησιμοποιείται για την αποδέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την αποδέσμευση μνήμης | ||
| <code c++ dynamicMemory.cpp> | <code c++ dynamicMemory.cpp> | ||
| Line 49: | Line 51: | ||
| ===== Έλεγχος δέσμευσης μνήμης ===== | ===== Έλεγχος δέσμευσης μνήμης ===== | ||
| - | Κατά τη δέσμευση μνήμης δεν είναι απαραίτητο να γίνονται οι έλεγχοι για το κατά πόσο η δέσμευση απέτυχε. Στην περίπτωση που η δέσμευση μνήμης αποτύχει τότε παράγεται ένα // | + | Κατά τη δέσμευση μνήμης δεν είναι απαραίτητο να γίνονται οι έλεγχοι για το κατά πόσο η δέσμευση απέτυχε. Στην περίπτωση που η δέσμευση μνήμης αποτύχει τότε παράγεται ένα // |
| <code c++ dynamicMemory.cpp> | <code c++ dynamicMemory.cpp> | ||
| Line 75: | Line 77: | ||
| delete []p; | delete []p; | ||
| delete num; | delete num; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Παράδειγμα δέσμευσης μνήμης για την αρχικοποίηση ενός διδιάστατου πίνακα ===== | ||
| + | |||
| + | <code cpp dynamicMemory2D.cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | using namespace std; | ||
| + | |||
| + | int main(int argc, char *argv[]) { | ||
| + | int **array2d, rows, columns; | ||
| + | | ||
| + | cout << "Enter number of rows: "; | ||
| + | cin >> rows; | ||
| + | | ||
| + | cout << "Enter number of columns: "; | ||
| + | cin >> columns; | ||
| + | | ||
| + | array2d = new (nothrow) int*[rows]; | ||
| + | if(array2d == NULL) { | ||
| + | cerr < " | ||
| + | return -1; | ||
| + | } | ||
| + | for(int i=0; i<rows; i++) { | ||
| + | array2d[i] = new (nothrow) int[columns]; | ||
| + | if(array2d[i] == NULL) { | ||
| + | cerr < " | ||
| + | return -1; | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | for(int i=0; i<rows; i++) { | ||
| + | for(int j=0; j< | ||
| + | array2d[i][j] = i+j; | ||
| + | cout << array2d[i][j] << " | ||
| + | } | ||
| + | cout << endl; | ||
| + | } | ||
| + | | ||
| + | for(int i=0; i<rows; i++) | ||
| + | delete[] array2d[i]; | ||
| + | delete[] array2d; | ||
| } | } | ||
| </ | </ | ||