kfgz Opublikowano 22 Marca 2009 Zgłoś Opublikowano 22 Marca 2009 (edytowane) Witam, Jak napisać sprawdzenie czy jest jeszcze wolna pamięć żeby zainicjować tablicę? #include <stdlib.h>#include <stdio.h>float *floatt;int main(int argc, char *argv[]) { int k, i, j = 1000000000; // j = 1GB for(i = 0; i < 6; i++) { if (!(floatt = new float [j])) { printf ("\n\nError: out of RAM!\n\n"); exit(1); } else { for (k = 0; k < j; k++) if(!(floatt[k] = 2.35)) {printf ("\n\nError: out of RAM!\n\n");exit(1);}// 4GB RAM alloc printf("\nLoop: %d", i + 1); } //delete [] floatt; } return(0);} Powyższy kod kończy się błędem terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Oczywiście delete [] floatt; zakomentowałem z premedytacją. Edytowane 23 Marca 2009 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 22 Marca 2009 Zgłoś Opublikowano 22 Marca 2009 (edytowane) try {//tutaj uzyj new}catch (const std::bad_alloc& e) {printf("\nException: bad_alloc");} Edytowane 22 Marca 2009 przez Jastrząb Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 23 Marca 2009 Zgłoś Opublikowano 23 Marca 2009 Dziękować. Działa tak jak chciałem. Końcowy kod: #include <stdlib.h>#include <stdio.h>#include <iostream>float *floatt;int main(int argc, char *argv[]) { int k, i, j = 1000000000; // j = 1GB for(i = 0; i < 6; i++) { try {floatt = new float [j];} catch (const std::bad_alloc& e) { printf("\nError: out of RAM!"); exit(1); } for (k = 0; k < j; k++) { floatt[k] = 2.35; // 4GB RAM alloc } printf("\nLoop: %d", i + 1); delete [] floatt; } return(0);} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...