Rumah > pembangunan bahagian belakang > C++ > Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.

Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.

王林
Lepaskan: 2023-09-11 13:41:02
ke hadapan
1428 orang telah melayarinya

在C语言中,堆溢出(Heap overflow)和栈溢出(Stack overflow)是指程序在使用堆内存或栈内存时超出了其分配的边界

Limpahan timbunan

Timbunan digunakan untuk menyimpan pembolehubah dinamik. Ia adalah kawasan memori proses. malloc(), calloc(), resize() semua fungsi terbina dalam ini biasanya digunakan untuk menyimpan pembolehubah dinamik.

Apabila limpahan timbunan berlaku -

A) Jika kita memperuntukkan pembolehubah nombor besar dinamik -

int main() {
   float *ptr = (int *)malloc(sizeof(float)*1000000.0));
}
Salin selepas log masuk

B) Jika kita memperuntukkan memori secara berterusan dan tidak melepaskannya selepas digunakan.

int main() {
   for (int i=0; i<100000000000; i++) {
      int *p = (int *)malloc(sizeof(int));
   }
}
Salin selepas log masuk

Timbunan Limpahan

Timbunan ialah struktur data yang terakhir masuk dahulu. Ia digunakan untuk menyimpan pembolehubah tempatan yang digunakan di dalam fungsi. Parameter dihantar melalui fungsi ini dan alamat pemulangannya.

Jika program menggunakan lebih banyak ruang memori, maka limpahan tindanan akan berlaku disebabkan saiz tindanan yang terhad dalam ingatan komputer.

Limpahan timbunan berlaku apabila-

C) Jika fungsi dipanggil secara rekursif dengan sendirinya masa tak terhingga, maka timbunan tidak akan dapat menyimpan sejumlah besar pembolehubah tempatan, jadi limpahan tindanan berlaku-

void calculate(int a) {
   if (a== 0)
      return;
      a = 6;
      calculate(a);
}
int main() {
   int a = 5;
   calculate(a);
}
Salin selepas log masuk

D) Jika sebilangan besar pembolehubah tempatan diisytiharkan atau dimensi besar diisytiharkan Tatasusunan atau matriks, boleh menyebabkan limpahan tindanan.

rreeee

Atas ialah kandungan terperinci Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan