언어/C&C++ 응용 20

[C] Visual Studio scanf 해결

error C4996 'scanf'에 에러가 뜨는 경우가 있다. Visual Studio에서 SDL 검사를 하면서, scanf 가 보안 취약점이 있으니 scanf_s 를 사용하라고 강요(?) 한다. 에러에서 _CRT_SECURE_NO_WARNINGS를 사용하라고 추천해준다. 이 문제를 해결하는 덴 여러 방법이 있다. 1. 추천한대로 scanf_s를 사용해도 된다. scanf_s("%d", &n, sizeof(n)); 인자는 차례대로, 포맷 스트링, 변수 주소, 변수의 사이즈이다. stack overflow를 방지하기 해서 크기를 받는다. 2. _CRT_SECURE_NO_WARNINGS를 사용한다. 코드 위에 #define _CRT_SECURE_NO_WARNINGS 를 추가해준다. 3. SDL 검사를 끈다..

언어/C&C++ 응용 2021.08.02

[C++] STL vector

vector template class vector; // generic template T : 요소의 type Alloc: 저장공간 할당 모델을 지정. 기본적으로는 allocator 클래스로 지정되어 있다. (가장 간단한 메모리 할당 모델이고, type에 영향을 받지 않는다) 설명 https://www.cplusplus.com/reference/vector/vector/ vector - C++ Reference difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t www.cpluspl..

언어/C&C++ 응용 2021.06.22

[C++ 템플릿] 스택(stack), 큐(queue), 우선순위 큐(priority_queue)

1. 스택(stack) https://www.cplusplus.com/reference/stack/stack/?kw=stack stack - C++ Reference container_typeThe second template parameter (Container)Type of the underlying container www.cplusplus.com Member functions empty: 스택이 비었는지 확인 size: 스택에 들어있는 엘리먼트 수 = 스택 사이즈 반환 top: 다음 엘리먼트 접근 push: 새로운 엘리먼트 추가 emplace: construct and insert element pop: 맨 위에 있는 엘리먼트 삭제 swap: 내용물 바꿈 예시) #include #include u..

언어/C&C++ 응용 2021.06.14

[TS] Invalid address specified to RTlValidateHeap & DLL개념

에러상황: // 사용하고 있던 구조체 & 변수 정의 typedef struct node ={ NODE* right; NODE* left; void* data; }NODE; NODE* root = ...; NODE* newRoot = ...; // 문제가 생긴 부분: free(root->data); newRoot = root->right; 자꾸 위 두 줄 에서 문제가 떠서 대체 문제가 뭔지... 싶었다. 'x' 표시가 뜬 줄에 문제가 있은 줄 알고 메모리 공간에 들어가있는 데이터를 일일이 따지며 보았지만 문제를 찾을 수가 없었다. 왜냐면 문제는 그 윗줄에 있었으므로..! 경고 메시지로 HEAP[bst2.exe]: Invalid address specified to RtlValidateHeap( 000001..

언어/C&C++ 응용 2021.06.14

[C] 이중포인터

*pdata 는 data를 의미함 **ppdata 도 data를 의미함 *ppdata 는 pdata를 의미함 왜 이중 포인터를 사용하는가? 다음 코드를 보면.. void addNode(LIST* myList, MYDATA* myData) { NODE* newNode = (NODE*)malloc(sizeof(NODE)); newNode->dataptr = myData; newNode->next = NULL; NODE* pPre = NULL; NODE* pLoc = NULL; int result = _search(myList, &pPre, &pLoc, myData); if (result) { // insert } } int _search(LIST* myList, NODE** ppPre, NODE** ppLo..

언어/C&C++ 응용 2021.06.14

[TS] strcpy, strcpy_s

strcpy - 문자열 복사 기능 - 변수나 문자열 상수에 저장되어 있는 문자열을 다른 변수(메모리)에 복사할 때 주로 사용. 복사할 원문은 반드시 끝에 NULL문자가 포함되어 있어야 한다. 함수 원형: char *strcpy(char *strDestination, const char* strSrc); - strcpy 함수가 반환하는 char*는 strDestination과 같은 값, 문자열 배열의 시작 값 에러: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS strcpy는 복사할 메모리 제한을 안걸기 때문에 ..

언어/C&C++ 응용 2021.06.14

[C] include, include guard(#idndef)

include - 해당 파일을 찾아서 그 파일의 코드를 복붙한다고 이해하면 됨. - 두 가지 방식: #include : 라이브러리에서 헤더파일 찾음 #include "": 주소에서 찾음 (일단 현재 디렉토리에서 검색함) include guard 헤더 파일이 참조되거나 include 될 때 중복되는 것을 방지하기 위해서 사용하는 것 element라는 게 여러 파일에서 다르게 정의될까봐 이를 막으려고 하는 것이다. - ifndef 방식을 주로 사용한다. #ifndef ELEMENT // 만약 element가 정의되지 않았다면 #define ELEMENT // 여기서 정의해라 // 내용 #endif //가드 되는 부분의 끝

언어/C&C++ 응용 2021.06.14

[C] 메모리 동적 할당

동적 메모리 할당: 함수가 호출될 때마다 새로 할당되고, 함수를 빠져나가도 유지되는 변수 malloc, free 정의 #include void* malloc(size_t size); //힙 영역 메모리 할당, 해당 메모리 주소값 반환, 실패 시 NULL반환 void free(void* ptr); // 힙 영역 할당된 메모리 공간 해제 * 선언방식 int *ptr_i = (int*)malloc(sizeof(int)); double* ptr_da = (double*)malloc(sizeof(double)*9; // 배열처럼 - type casting 하지 않으면 해당 메모리에 저장 불가능함! - malloc은 실패 시 NULL을 반환하므로, 메모리가 배당되었는지 확인하는 코드를 작성해야 한다. - 동적 할당..

언어/C&C++ 응용 2021.06.14