Jawaban:
Anda mungkin baru saja mendapatkan tumpukan melimpah di sini. Array terlalu besar untuk muat dalam ruang alamat stack program Anda.
Jika Anda mengalokasikan array pada heap, Anda akan baik-baik saja, dengan asumsi mesin Anda memiliki cukup memori.
int* array = new int[1000000];
Tapi ingat bahwa ini akan meminta Anda ke delete[]
array. Solusi yang lebih baik adalah menggunakan std::vector<int>
dan mengubah ukurannya menjadi 1000000 elemen.
Dalam C atau C ++ objek lokal biasanya dialokasikan di stack. Anda mengalokasikan array besar pada tumpukan, lebih dari yang bisa ditangani tumpukan, sehingga Anda mendapatkan aliran tumpukan .
Jangan mengalokasikannya secara lokal di stack, gunakan tempat lain sebagai gantinya. Ini dapat dicapai dengan membuat objek menjadi global atau mengalokasikannya di heap global . Variabel global baik-baik saja, jika Anda tidak menggunakan dari unit kompilasi lain. Untuk memastikan ini tidak terjadi secara tidak sengaja, tambahkan penentu penyimpanan statis, jika tidak, gunakan saja heap.
Ini akan mengalokasikan di segmen BSS, yang merupakan bagian dari heap:
static int c[1000000];
int main()
{
cout << "done\n";
return 0;
}
Ini akan dialokasikan di segmen DATA, yang merupakan bagian dari heap juga:
int c[1000000] = {};
int main()
{
cout << "done\n";
return 0;
}
Ini akan mengalokasikan di beberapa lokasi yang tidak ditentukan di heap:
int main()
{
int* c = new int[1000000];
cout << "done\n";
return 0;
}
delete
mana pun Anda mengalokasikan new
. Tetapi jika Anda yakin Anda mengalokasikan memori hanya sekali (seperti di main) itu sama sekali tidak diperlukan - memori dijamin akan dibebaskan saat keluar dari main bahkan tanpa eksplisit delete
.
Selain itu, jika Anda menjalankan sebagian besar sistem UNIX & Linux, Anda dapat meningkatkan ukuran tumpukan untuk sementara dengan perintah berikut:
ulimit -s unlimited
Tetapi hati-hati, ingatan adalah sumber daya yang terbatas dan dengan kekuatan besar datanglah tanggung jawab yang besar :)
Array Anda sedang dialokasikan pada tumpukan dalam hal ini mencoba untuk mengalokasikan array dengan ukuran yang sama menggunakan alokasikan.
Karena Anda menyimpan array di stack. Anda harus menyimpannya di heap. Lihat tautan ini untuk memahami konsep heap dan tumpukan.