글

라벨이 C/CPP인 게시물 표시

[VS/에러]error C2146: 구문 오류 : ';'이(가) 'PVOID64' 식별자 앞에 없습니다...winnt.h C4430 "PVOID64" 컴파일에러 프로그래밍

c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(290): error C2146: 구문 오류 : ';'이(가) 'PVOID64' 식별자 앞에 없습니다. 여기서 발생하는 문제는 식별자가 없어서인데.. 대부분의 포스팅들이 식별자를 헤더파일에 추가하라고 되어있다. 그런데 이건 해결방법이 못된다. 내가 못하는건지 원래 안되는건지는 모르겠지만,   SDK에 포함된 헤더파일을 수정할땐  저장할때 엑세스 불가가 되어 저장이 불가능하다. #include <basetsd.h> .....(중략) typedef void *PVOID; typedef void * POINTER_64 PVOID64; 실질적인 정의는 basetsd.h에서 정의가 되어있지않아 발생되는 에러인데, SDK중에 basetsd.h가 몇개씩되는데 기본으로 접근하는 헤더파일에서는 선언되어있지않은  파일에 접근해 발생하게된다. 이때 에러가 난 폴더에 basetsd.h에는 이부분이 정의되어있으므로, 이것을 가지고 올수있도록 프로젝트 속성에서 해당 파일의 경로를 추가 포함 디렉토리로 설정 해주면 해결된다. *참조:  http://hashs.tistory.com/91 (스크랩2)

[VS/디버깅]Detected memory leaks!(메모리의 누수가 감지되었습니다!)

Detected memory leaks!  Dumping objects -> {10} normal block at 0x037EA8C8, 20 bytes long.  Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  이 메세지는 디버그모드로 프로그램이 종료될때  메모리의 누수  나타나는 메세지다. 여기서 {10}은 누수가 나타난 부분메모리 할당된 메모리 영역의 번호를 의미한다. 하지만, 일반적인 프로그래머가 이 메세지를 보고 어디서 난지 확인 하는건 어렵다. 그래서, VS에서는 디버그모드에서 특정 할당메모리에 중단점을 설정하는 함수가 있다. _CrtSetBreakAlloc(10); 메인프로그램의 시작위치에 함수를 넣고 위 메세지에 나타난 메모리 번호를 넣어주면된다. 그러면 디버그로 실행했을때 해당 메모리가 할당된후 중단이 되는데,  여기서 스택을 따라 이동해서 확인해보면  동적으로 할당해  문제가 발생된 메모리 를 알수있다. *메모리의 누수: 메모리가 동적으로 할당된경우 메모리가 자동으로 해제되지않는데, 이때 프로그래머가 임의적으로 메모리를 해제하지않아서 프로그램이 종료된뒤에도 해당 메모리가 남아있는 현상을 말한다. *추가 예제: #include <crtdbg.h> //필요해더파일 #include <stdio.h> void main() { _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //디버그에 메모리립이 생기면 프로그램이 종료되고 알려줄때 사용됨. _CrtSetBreakAlloc(10); //10번 메모리가 할당될때 중단점을...

Run-Time Check Failure #2

#2 선언되지 않은 포인터(메모리)에 접근한경우 int arInt[3]; arInt[3] = 0; 이런식으로 접근한 경우 문제가 발생한다. #3 선언은 되어있지만 초기화되지않은 값을 가져다 쓰려고 할때 발생함. 참조:  http://woogyun.tistory.com/206

[Linux]fabs와 abs

리눅스와 원도우의 크로스컴파일중에 abs함수를 사용했는데.  윈도우에서는 소수점연산이됬지만 리눅스에서는 정수로 계산되어버렸다.  리눅스놈은 꾀나 까탈스럽구만

[xCode/cpp]unknown type name 'class' did you mean 'class'

이미지
os에서 cpp소스를 그대로 사용하려고하면 이에러가 나타난다. 이는 컴파일러소스가 변경되지않아 나는 에러이다. 다음과같이 컴파일러소스를 변경해주면 문제는 해결된다. http://tingcobell.tistory.com/345 [ XCode Error ] Expected ';' after top level declarator 1. XCode 에서 다음과 같은 error가 발생시 해결할 수 있다. Unknown type name 'class' did you mean 'Class'? Expected ';' after top leve... tingcobell.tistory.com

[iOS/Obj-C/xCode]NSObjCRuntime.h에서 unknown type name 'nsstring'발생

http://qiita.com/kuuki_yomenaio/items/6edc7cb16a81d2bc9ef5 컴파일러에서 파일에따라 맞춰 컴파일할때 이런 문제가 생길수있다. 메인함수의 확장자가 cpp인데 OjectC++ 소스가 혼용되어 사용되서 생긴문제다.

[C#]박싱과 언박싱

박싱: 정적할당변수를 동적할당된변수로 바꾸는 것 -> 동적할당하여 전역에서 접근가능하도록 만듦. 언박싱: 동적할당된 변수를 정적할당으로 변경하는것 -> 값이 복사되어 지역변수 사용됨. https://linsoo.co.kr/archives/8997

[객체지향프로그래밍]동적바인딩과 정적바인딩 개념

*아래 내용은 모두 프로그래밍에 해당되는 내용입니다. 주관적인 내용도 들어가있습니다. 잘못된점이 있다면 지적부탁드립니다. 1.바인딩(binding)   루틴 이나  객체 의  링킹 이 실시 그순간의 상태를 말함. -> 동적할당될때 함수의 기능이 결정 *루틴: 함수(메서드)나 라이브러리 -> 함수의 기능 *객체: 설계된 클래스를 변수로 한것. -> 객체지향형언어에서는 클래스변수의 선언 *링킹: 연결하는 과정 -> 동적할당을 하면 메모리가 결정됨 2.동적 바인딩(dynamic binding)  1)프로그램의 실행시에 저장소가 마련되는것. -> 동적할당시에 메모리가 생성됨  2)프로그램의 실행 경로가 미리결정됨. 3.정적바인딩(static binding)  1)프로그램의 실행 전에 저장소가 마련되는것. -> 컴파일 중에 저장소가 마련되고 변수의 이름으로 레이블링 됨.   2)프로그램의 실행 전에 경로가 미리결정됨. 참조:  http://www.eyegirl.co.kr/bbs/board.php?bo_table=web_tip&wr_id=113

[C/C++]오버로딩과 오버라이딩의 차이

1.오버로딩: 함수를 같은 이름으로 파라메터 종류나 갯수만 다르게 정의함. ex) void fn(int a, int b); void fn(float a, float b); void fn(int a, int b, int c); 2.오버라이딩: 추상클래스의 맴버 가상함수를 함수의 이름과 파라메터 모두 같도록 정의함. ex) class Parent { public: virtual fn(); }; class Child :Parent { public: virtual fn(); };

[C/C++]Error LINK 2019 해결방법

으.. CustomUI이로 골머리 앏고있엇는 비교적 간단하게 해결가능하네요. 다른분들도 꼭 참조해보시기바랍니다~ 2011. 5. 29. 7:32 https://sadiles.blog.me/10072075057?from=relay

[C/C++]Delete, Release 활용법과 사용용도 차이

https://blog.naver.com/olonelyo/110100316935 SAFE_DELETE: 동적할당해제 및 초기화 SAFE_RELEASE: 파괴자가 아닌 Release함수를 통해 내부 객체들을 해제함.

[C/C++]typedef 구조체 선언과 롱포인터

typedef struct _Position { int x; int y; }Position, *LPPosition; 구조체를 선언할때 뒷쪽에 이름을 정해주는데 이때 이름을 여러게 정의할수있다, 이럴때 포인터형으로 정의를 하게되면 (추가: typedef는 없어도 재정의는 가능하다) typedef Position* LPPosition; 와같은 형태로 볼수있다. 그러므로 사용할때는 LPPosition pPT; 로 선언해서 사용하면 이것은 Position* pPT; 와 같은 역활을 한다. *LP는 롱포인터의 약자이며 마이크로스프트에서 포인터형 구조체를 제정의 해서 사용할때 주로 이용되는듯하다.

[C/C++]error C2243: '형식 캐스팅' ... 변환이 있지만 액세스할 수 없습니다.

error C2243: '형식 캐스팅' : ....(으)로의 변환이 있지만 액세스할 수 없습니다. class Parent{ .... } class Child:Parent{  .... } void main() { Parent* pParent; Child c Child; pParent = new Child;  //에러 pParent = &cChild; //에러 } 발생하는때 1. 포인터 부모클레스에 자식클래스를 동적으로 할당할때. 2. 포인터 부모클래스에 자식클래스의 주소를 넣을때  해결방법 1. 상속을 받을때 public으로 지정해주면됩니다. class Child:public Parent{  .... } 참조:  http://westwoodforever.blogspot.com/2011/09/error-c2243.html

[C/C++]5가지 기본 데이터형 (char,int,float,double,void)

void main() { char cChar = 0, *pChar; int iInt = 0, *pInt; float fFloat = 0, *pFloat; double dDouble = 0, *pDouble; void* pVoid = NULL; //일반  데이터형으로는 사용이 불가능하고, 포인터로만 사용이 가능하다.  SA sStruct; //구조체 CA cClass; //클래스 UA uUnion; //공용체    //포인터는 데이터형이 맞아야만 저장이 가능하다. pChar = &cChar; pInt = &iInt; pFloat = &fFloat; pDouble = &dDouble; //pChar = &iInt; //error //pChar = pInt; //error //변수를 초기화할때, 데이터형은 어떤것이든 상관없다. cChar = 111; iInt = 'a'; fFloat = 'f'; dDouble = 'd'; //출력은 변수타입과 상관없이 데이터를 다른형태로 출력가능하다. printf("char:%c/%d\n", cChar, sizeof(cChar)); // o/1 printf("int:%d/%d\n", iInt, sizeof(iInt)); // 97/4 printf("float:%f/%d\n", fFloat, sizeof(fFloat)); //102.000000/4 printf("double:%f/%d\n", dDouble, sizeof(dDouble)); //100.000000/8 //변수를 다른데이터형에 변환할때 잘리는 경우 워닝을 발생시킨다  cChar = iInt; iInt = cChar; cC...

[C/C++,자료구조]Reverse Single-Linked List

이미지
싱글링크드 리스트 뒤집기 *아래 그림에서 사용될 그림기호이다. *사용할 리스트  임시로 구조체의 크기는 1(물론 실제 노드는 이 크기 일리없지만 편의를 위해 가정하겠다.)     *사용한 뒤집기 함수 구조   싱글링크드리스트를 뒤집으려면 이전의 노드 값을 알아야하고 다음 이전노드를 다음 노드로 바꾸고  다음 노드는 이전의 노드의 다음 노드로 설정한다.    그런데 이때 중요한것은 이렇게 변경한뒤에 이전 노드의 위치를 알수가 없다는 것이다.  그러므로  임시저장소 를 이용해서 바꾸기전에  이전노드 를 저장한다. *결과

[C/C++]문자열 뒤집기(String Reverse)

이미지
문자열 뒤집기(String Reverse) 문자열을 뒤집을때 길을 재고 절반에 마지막인덱스와 첫인덱스에 데이터를 교체한다.   *코드 void swap(char &a, char &b) { char temp; temp = a; a = b; b = temp; }  void StrReverse(char* str) { int size = 0; char temp;  while(str[size]!= NULL) size++;  for(int i = 0; i < size/2; i++) { swap(str[i],str[(size-1)-i]); } }  void main() { //char* str = "downkhg"; //swap()->a=b bug char str[100] = "downkhg"; int size = 0;  printf("str:%s\n",str);  StrReverse(str); printf("str:%s\n",str); } bug된 부분에서 버그를 만나고 한참을 해맸다. 이것은 배열과 포인터의 차이인데.. 포인터도 선언해도 배열로 접근하면 다음 포인터로 이동함으로써 접근은 가능하지만 데이터 자체를 교환할때는 포인터의 경우 문자열의 시작 주소만 가르키고 있으므로, 다른 주소에 접근할땐 문제가 발생할수 있다고한다. 하지만 배열은 할당받을때부터 배열을 자신의 영역으로 받으므로 문제의 소지가 없다고한다. 문제 1.포인터는 문자열의 시작 주소만 가지고 있다. 배열식으로 접근이 포인터의 이동으로 가능하지만 일반적인 사용을 할경우 문제가 발생 할 경우도 있다. 결론: 포인터를 배열로 접근은 삼가한다. 배열로 접근해야 한다면 동적으로 할당하거나 배열을 이용한...

EOF와 파일읽기

이번에 텍스트 데이터를 바이너리로 쓰는 작업을하는데 파일은 제데로 써지는거 같은데 리드할때 파일이 끝이 아닌데도 자꾸 끝으로 인식하는 문제가 발생했다 이틀간에 삽질후 동안 텍스트로 읽을시 특정 위치에서 EOF를 발건했는데, 결국 원흉은 내가 보고 작성한 예제에 빠져있던 바이너리 설정이 빠진것이었다.. 참조: http://mwultong.blogspot.com/2008/03/eof-ascii-code-end-of-file.html 2012. 7. 10. 8:29

[C/C++]가상함수와 빌드

가상함수를 상속받아 사용하는 함수의 파라메터를변경하고 상위클레스의 빈가상함수를 그대로 두고 컴파일했다.  가상함수는 부분빌드로는 변경되지 않는다.  가상함수를 바꿀시에는 다시빌드하기를 꼭 잊지말자

[C/C++]#ifdef #else

아래와 같이 사용한다. #define TEST_IFDEF  0  //#define TEST_IFDEF  1 #ifdef  TEST_IFDEF printf("ifdef");  // TEST_IFDEF 1 #else printf("else");  // TEST_IFDEF 0 참조:  http://blog.naver.com/hermet?Redirect=Log&logNo=150555815

[C/C++]CString char배열로 복사 및 변환

MFC에서 많이 사용하는 CString는  사용하기는 편리하나 c코드를 이용해 무언가를 하려면 char배열형으로 변환 할수 밖에 없는데 이때 문제가 많이 발생한다. 특히 유니코드 문자일 경우는 일반적인 방법으로 문자열의 변환이나 카피가 불가능하다. 몇가지방법을 검색해본것중에 변환으로 하는것들은 하나도 되는 것이 없었으므로 변환은  일반적인 케스팅에 의한 변환 으로는  포인터로 전달되는 경우 제대로된 결과값을 얻을수없다. 그러니 제일 좋은 방법은 복사해서 사용하는 것이라고 할수있겠다. //코드 유니코드 문자열일 경우 char* szString; CString strString;  int nLength= strString.GetLength(); szString = new char[nLength];   //길이가 안맞을 경우 문제가 발생할수 있으므로 크기만큼할당한다. WideCharToMultiByte(CP_ACP,0,(LPCWSTR)strString,nLength,szString,nLength,NULL,NULL); ........(중략) delete[] szString;  //동적으로 할당했으므로 사용후 반드시 삭제할것. 참조:  http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=804764&ref=804764