목록c, c++ (7)
오답노트
선언 된 배열 및 문자열이 지정 된 크기를 넘어선 경우에 발생한다. char String[]; 을 char String[100]; 로 바꿔주어 해결했다.
void InitMembers(char * ID, int fuel) { strcpy(gamerID, ID); fuelGauge = fuel; } int main(void) { InitMemebers("run99", 100); };위와 같은 코드를 작성했을 때, 제목과 같은 컴파일 에러가 발생했다. 검색해보니 "run99" 가 상수처리가 돼서 const char * 의 데이터 형식이 되었고, 따라서 char * 를 매개변수로 받는 함수와 호환 되지 않았던 것이었다. 현재 책을 보면서 공부 중인데 책의 예제에서는 char * ID 로 사용해도 별 문제가 없었는데 왜 그런가해서 좀 더 찾아보니 단순 컴파일러의 버전 차이 때문에 일어나는 일이라고 했다. 따라서 해당 예제를 사용하기 위해서는 코드를 // 1. v..
Call-by-Value: 값을 인자로 전달하는 함수의 호출 방식 Call-by-Reference: 주소값을 인자로 전달하는 함수의 호출 방식 // Call-by-Value int Adder(int num1, int num2) { return num1+num2; }Call-by-Value 의 형태로 정의 된 함수의 내부에서는 함수 외부에 선언 된 변수에 접근이 불가능하다. void SwapByValue(int num1, int num2) { int temp = num1; num1 = num2; num2 = temp; }즉, 위와 같은 함수의 형태로는 인자로 받은 두 변수간의 값을 변경할 수 없다. 두 변수간의 값을 변경하는 것처럼 함수 내부에서 외부에 선언 된 변수에 접근하고자 할 때는 void Swap..
혼자 cpp 의 namespace 부분을 공부하던 중 헤더파일, 소스파일을 불러오는 방식에 대해 헷갈리는 게 생겨 정리해둔다. // namespace.h namespace BestComImpl { void SimpleFunc(void); } namespace ProComImpl { void SimpleFunc(void); } 다른 namespace 내 같은 이름의 함수들을 선언한다. // NoMain.cpp #include #include "namespace.h" void BestComImpl::SimpleFunc(void) { std::cout
한 프로젝트 폴더에 여러 소스파일들을 넣고 작업을 할 때, 전역변수로 선언 한 변수의 이름과 다른 소스 파일의 이름이 같아 발생한 오류였다. int a; // 전역 변수 ... int a (void) { ... } // 전역 변수와 같은 이름의 함수 이름 해당 함수의 이름이나 전역변수의 이름을 서로 다른 이름으로 수정해주니 해당 오류는 발생하지 않았다.
액세스 위반의 경우에는 두 가지가 있다. 1. 메모리 할당이 되지 않은 포인터를 쓴 경우. 2. 읽기 전용 메모리에 쓰기를 수행한 경우. 이 경우에는 메모리 할당이 되지 않은 포인터를 잘못 쓴 경우였다. 사실 대부분이 이런 경우가 아닐까싶다. #include void input_nums(int *lotto_nums); // 배열에 로또 번호 입력하는 함수 void print_nums(int *lotto_nums); // 배열에 저장 된 번호를 출력하는 함수 int main(void) { int lotto_nums[6]; // 배열 선언 input_nums(lotto_nums); // 로또 입력함수 호출 print_nums(lotto_nums); // 저장 값 출력함수 호출 return 0; } void ..