본문 바로가기

반응형

Programming/C/C++

(42)
C/고수준 파일 입출력/파일 포인터 지정 및 반환 고수준 입출력 함수fopen(3) : 파일 열기저수준에서는 명시적으로 READ_ONLY, WRITE 형식으로 쓰임.고수준에서는 "r" 처럼 지정 모드로 연다.파일 모드 리스트 fopen 예시 - fclose(3) 파일이 열려있으면 닫아야함.fclose() 사용 예시
C/고수준 파일입출력/파일 기술자 # 환경 - CensOS 7 - Windows 10- Visual Studio- Vim 파일 기술자와 파일 포인터 파일 기술자 (파일 디스크립터) - 저수준 입출력에서 사용0 : 표준 입력1 : 표준 출력2 : 표준 에러0, 1, 2 은 예악되어 있기 때문에 파일 기술자는 3번부터 고수준 입출력 - 파일 포인터 사용 fp구조체에 대한 포인터를 가리키는 것.자료형 FILE * 형 사용고수준 입출력의 함수는 함수 이름에 f가 붙어 있다. 파일 기술자와 파일 포인터 간의 관계
C++/동적 메모리 할당과 메모리 누수(memory leak) 메모리 누수 (memory leak)동적으로 할당받은 메모리의 주소를 잃어버려 힙에 반환할 수 없게 되면 메모리 누수가 발생한다.메모리 누수가 계속 발생하는 루틴이 계속 반복 될 경우, 프로그램 종료 되고 다시 시작 하기 이전까지 실행 중에는 메모리를 할당받을 수 없는 심각한 상황이 발생할 수 있다. 메모리 누수 예시 1123char n = 'a';char *p = new char[1024];p = &n;cs 위 코드에서 new로 할당 받은 1024 바이트의 메모리 누수가 발생한다. 위 코드에서 처음 *p는 동적으로 할당한 1024바이트의 메모리 주소를 가지고 있었지만, p 가 n의 주소값을 가지게되면서 1024바이트의 메모리 주소를 반환할 수 없게 된다. 메모리 누수 예시 21234char *p;for..
C++/객체와 객체 배열의 동적 생성 및 반환 객체의 동적 생성 및 반환new는 클래스 크기의 메모리를 할당 받아 객체를 생성하며, 이때 생성자를 호출한다.delete이 실행되면 객체를 반환하기 직전에 소멸자가 실행된다. 객체 생성과 객체 반환 예123456Circle *p = new Circle;Circle *q = new Circle(30); delete p;delete q; cs delete 사용시 주의점반환할 객체는 반드시 new를 이용해 할당 받은 동적 메모리에 존재하는 객체여야 한다.다음 delete 문은 실행 오류를 발생 시킨다. 1234Circle donut;Circle *p = &donut; delete p;cs Circle 객체의 동적 생성 및 반환12345678910111213141516171819202122232425262728..
C++/동적 메모리 할당 및 반환 동적 메모리 할당 프로그래머가 프로그램 작성시 메모리 확보를 위해 변수, 객체, 배열을 정적으로 할당 받는다. 사용자 중심에서 본다면 그 때 그 때 마다 필요한 메모리가 달라지기 때문에 정적으로 할당하기에는 한계가 있다. 즉 프로그램이 실행 중에 필요한 만큼 메모리를 할당받고 필요 없을 때 반환 할 수 있는 '동적 메모리 할당/반환 메커니즘'이 필요하다. 동적 메모리는 C에서는 함수를 통해 C++에서는 연산자를 통해 힙(heap)영역에 할당 된다. C의 동적 메모리 할당 및 반환 - malloc() / free() C++의 동적 메모리 할당 및 반환 - new / delete new와 delete의 기본 new 연산자는 데이터타입의 크기 만큼 힙으로 부터 메모리를 할당 그 결과 메모리에 접근 할 수 있는..
C++/CPPRESTSDK_VisualStudio에 설치 및 라이브러리 관리 # 목적 html body를 파싱하기 이전에 get/post request를 할 수 있는 라이브러리가 필요해서 찾아보았고, 기본적인 라이브러리 설치방법을 요약해서 기록하려고 함. # 환경 - Visual Studio - C++ # 설치과정 1. visual studio의 프로젝트탭에 NuGet 패키지 관리를 클릭. 2. 찾아보기 탭으로 변경하고 cpprestsdk를 입력. 3. cpprestsdk 작성자 : casablancacore를 확인하고 클릭하여 오른쪽 탭에 활성화되는 스크린의 설치를 클릭하여 설치 진행. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585..
C++/객체 배열 객체 배열 객체 배열은 원소가 객체라는 점을 재외하고 선언과 그 활용이 일반 배열과 동일하다.객체 배열은 반드시 기본 생성자를 호출하며,클래스의 기본생성자 외 생성자를 생성시, 객체 배열을 사용해 해당 클래스로 객체를 생성했을 떄,기본 생성자가 존재하지 않아 오류가 난다* 반드시 기본 생성자를 삽입하여야 한다. Circle 클래스의 객체 배열 선언 및 활용1234567891011121314151617181920212223242526272829303132333435#include using namespace std; class Circle {private: int radius;public: Circle() { radius = 1; } Circle(int r) { radius = r; } void setRa..
C++/객체 포인터 객체 포인터 C언어에서 포인터 선언과 동일하게 객체에 대한 포인터 변수를 선언하고 이 포인터 변수를 통해 객체의 멤버 변수를 읽고 값을 쓰거나 멤버 함수를 호출할 수 있다. 객체 포인터 선언12345678910111213141516class Circle {private: int radius;public: Circle(); Circle(int r); double getArea(); }; Circle donut;double d = donut.getArea(); Circle *p;p = &donut;d = p->getArea();cs 객체 주소 지정 방법1231. p = &donut;2. Circle* p = &conut; cs 객체 멤버 접근 방법1231. d = donut.getArea();2. d = p..

반응형