> 백엔드 개발 > C++ > 본문

C 언어에서 힙 오버플로 및 스택 오버플로는 프로그램이 힙 메모리 또는 스택 메모리를 사용할 때 할당된 경계를 초과하는 경우를 나타냅니다.

王林
풀어 주다: 2023-09-11 13:41:02
앞으로
1382명이 탐색했습니다.

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

Heap Overflow

Heap은 동적 변수를 저장하는 데 사용됩니다. 프로세스 메모리 영역이다. malloc(), calloc(), resize() 이러한 모든 내장 함수는 일반적으로 동적 변수를 저장하는 데 사용됩니다.

힙 오버플로가 발생할 경우 -

A) 동적 큰 숫자 변수를 할당하는 경우 -

int main() {
   float *ptr = (int *)malloc(sizeof(float)*1000000.0));
}
로그인 후 복사

B) 메모리를 지속적으로 할당하고 사용 후 해제하지 않는 경우.

int main() {
   for (int i=0; i<100000000000; i++) {
      int *p = (int *)malloc(sizeof(int));
   }
}
로그인 후 복사

Stack Overflow

스택은 후입선출(Last In First Out) 데이터 구조입니다. 함수 내부에서 사용되는 지역 변수를 저장하는 데 사용됩니다. 매개변수는 이 함수와 반환 주소를 통해 전달됩니다.

프로그램이 더 많은 메모리 공간을 소비하면 컴퓨터 메모리의 제한된 스택 크기로 인해 스택 오버플로가 발생합니다.

스택 오버플로가 발생하는 경우-

C) 함수 자체가 무한대로 재귀적으로 호출되면 스택이 많은 수의 지역 변수를 저장할 수 없게 되어 스택 오버플로가 발생합니다-

void calculate(int a) {
   if (a== 0)
      return;
      a = 6;
      calculate(a);
}
int main() {
   int a = 5;
   calculate(a);
}
로그인 후 복사

D) 만약 많은 수의 지역 변수가 선언되거나 큰 차원이 배열 또는 행렬로 선언되면 스택 오버플로가 발생할 수 있습니다.

rreee

위 내용은 C 언어에서 힙 오버플로 및 스택 오버플로는 프로그램이 힙 메모리 또는 스택 메모리를 사용할 때 할당된 경계를 초과하는 경우를 나타냅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿