cpp:dynamic_memory
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| cpp:dynamic_memory [2017/04/11 10:00] – created gthanos | cpp:dynamic_memory [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 9: | Line 9: | ||
| </ | </ | ||
| - | Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για την δέσμευση μνήμης και την αρχικοποίηση ενός πίνακα. Δείτε το παρακάτω παράδειγμα χρήσης του τελεστή **new**. | + | Ο τελεστής **new** έχει δύο μορφές (**new** και **new[]**). Η πρώτη χρησιμοποιείται για την δέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τόπου, ενώ η δεύτερη για τη δέσμευση μνήμης και την αρχικοποίηση ενός πίνακα. |
| - | < | + | Σε αναλογία με τον τελεστή **new** ο τελεστής **delete** για την αποδέσμευση μνήμης έχει και αυτός δύο μορφές (**delete** και **delete[]**). Η πρώτη χρησιμοποιείται για την αποδέσμευση μνήμης ενός αντικειμένου ή μιας μεταβλητής βασικού τϋπου, ενώ η δεύτερη για την αποδέσμευση μνήμης ενός πίνακα. Δείτε το παρακάτω παράδειγμα χρήσης των τελεστών **new** και **delete**. |
| + | |||
| + | <code c++ dynamic_memory.cpp> | ||
| #include < | #include < | ||
| using namespace std; | using namespace std; | ||
| Line 34: | Line 36: | ||
| </ | </ | ||
| - | Για βασικούς τύπους δεδομένων | + | Για βασικούς τύπους δεδομένων μπορείτε να αρχικοποιήσετε τη μεταβλητή ως εξής, με χρήση του τελεστή **new**: |
| - | < | + | <code c++ dynamic_memory2.cpp> |
| #include < | #include < | ||
| using namespace std; | using namespace std; | ||
| int main () { | int main () { | ||
| - | int *num; | + | int *num_ptr; |
| - | | + | |
| - | cout << "num: " << | + | // στο περιεχόμενο της διεύθυνσης αυτής. |
| + | cout << "num: " << | ||
| } | } | ||
| </ | </ | ||
| + | ===== Έλεγχος δέσμευσης μνήμης ===== | ||
| + | Κατά τη δέσμευση μνήμης δεν είναι απαραίτητο να γίνονται οι έλεγχοι για το κατά πόσο η δέσμευση απέτυχε. Στην περίπτωση που η δέσμευση μνήμης αποτύχει τότε παράγεται ένα // | ||
| + | |||
| + | <code c++ dynamicMemory.cpp> | ||
| + | #include < | ||
| + | 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 << " | ||
| + | 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] << " | ||
| + | } | ||
| + | cout << endl; | ||
| + | delete []p; | ||
| + | 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; | ||
| + | } | ||
| + | </ | ||
cpp/dynamic_memory.1491904824.txt.gz · Last modified: 2017/04/11 09:00 (external edit)
