본문 바로가기
반응형

개발 노트 (C언어)3

Stack Overflow 왜 발생하는가? #스택 #큐 Stack OverflowStack Overflow는 Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생한다.Stack 메모리는 보통 지역 변수가 저장되는 영역이다. 함수에서 지역 변수를 선언하면 지역 변수는 Stack 메모리에 할당되고 함수를 빠져 나오면 Stack 메모리에서 해제된다. 하나의 프로그램이 실행 될 때 수 많은 함수를 호출하고 빠져 나오게 되는데 그 때마다 함수에서 사용하는 지역 변수는 Stack 영역에 할당되고 해제되는 것을 반복하게 되며 그에 따라 사용되는 Stack 영역도 변하게 된다.  만약 한 함수에서 너무 큰 지역 변수를 선언하거나 함수를 재귀적으로 무한정 호출하게 되면 Stack Overflow가 발생할 수 있다.  Stack Overflow가 발생하면 컴파일러 옵션에서.. 2024. 5. 15.
[C언어] 포인터 뭔가 이해한 것 같으면 새로운 게 생겨나는 포인터... 포인터에 대해 차근차근 알아보자.  1. 포인터 개념C언어에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부른다.char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장한다.2. 표기 int n = 100; //변수 선언int *ptr = &n; //포인터 선언 포인터 연산자C언어에서 포인터와 연관되어 사용되는 연산자는 다음과 같다. 1. 주소 연산자(&) 2. 참조 연산자(*)  주소 연산자(&)주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다. '&'기호는 앰퍼샌드(ampersand)라고 읽으며, 번지 연산자라고.. 2024. 4. 24.
[C언어] 비트 연산 및 비트 시프트 아래 Swith-case문에 사용된 내용 중 한 case만 Sample 예제로 가져왔다. 변수 초기값을 Setting 한다. uint8 set_0 = cOFF, set_1 = cOFF, set_2 = cOFF, set_3 = cOFF; uint16 PWM_Digital_Duty = 0; 아래 코드를 해석해보자. case HIGH_SPEED13_OUTPUT_CLOSE_SW: PWM_Digital_Duty = ( (uint32)pwmDuty PWM_MAX_DUTY) { PWM_Digital_Duty = PWM_MAX_DUTY; } else { ; } pCR7->PWMx_DC_9 = (PWM_Digital_Duty & 0x200)>>9; pCR7->PWMx_DC_8 = (PWM_Digital_Duty & 0x.. 2024. 4. 13.
반응형