[[프로그래밍_NOTE]]/C , C++ 39

free() 사용시 주의할 점

#include #include int* MyFunc(int* const pInt) { return pInt; } void main() { int * pInt1 = (int*)malloc(sizeof(int)); *pInt1 = 10; printf("*pInt1 => %d\n" , *pInt1); int * pInt2 = MyFunc(pInt1); printf("*pInt2 => %d\n" , *pInt2); free(pInt1); free(pInt2); } //result //analysis 그림에서 확일할 수 있듯이 동적으로 heap에 생성된 5000(실제로는 다를 수 있다)번지의 값을 pInt1 , pInt2가 공유하는 방식의 코드이다. 실제로 printf()함수를 통해 출력시에 당연히 각각 10의..

char 메모리 그림

#include #include void main() { char c1; char c2; char c3; strcpy(&c1,"123"); strcpy(&c2,"abcd"); strcpy(&c3,"5678"); printf("c1 -> %s\n",&c1); printf("c2 -> %s\n",&c2); printf("c3 -> %s\n",&c3); } [[ 결과 ]] Q) 왜 c1 , c2는 아무것도 출력하지 않는 것일까? [[ 분석 ]] char 의 메모리 사이즈는 1byte이지만, 실제로 윈도우(xp)상에서의 메모리 관리는 4byte단위로 이루어진다. 위의 결과를 간단히 그려보면 아래와 같다. strcpy() 함수에서 문자열의 마지막에 \0 (NULL)을 삽입하는 과정에서 다른 변수의 영역을 침범하기..

수식변환 알고리즘 ( stack 이용 )

/////////////////////////////////////////////////////////////////////////////// 1. 중위법 ((2*3)+(6/2))-4 // 사람들이 흔히 사용하는 수식의 표현 2*3+6/2-4 // 괄호의 생략 2. 후위법 23*62/+4- /////////////////////////////////////////////////////////////////////////////// ㄱ .중위법을 후위법으로 변화하는 알고리즘 - I // 전제 : 중위표기법이 반드시 괄호를 포함하고 있어야 한다. 1. '(' 문자는 무시하고 넘어간다. 2. 피연산자는 그대로 출력한다. 3. 연산자는 스택에 푸시한다. 4. ')' 를 만나면 스택에서 팝하여 출력한다. ㄴ. 중..

strcat 기능 구현

/** strcat()의 함수 사용 ******************************** #include #include void main() { char temp1[16] = {"홍길동"}; const char temp2[8] = {"김길동"}; strcat(temp1 , temp2); printf("temp1->%s\n",temp1); } ******************************************************/ /** 동일한 기능의 MyStrCat() 함수 구현 ****************** #include void MyStrCat(char* pDestptr , const char* pSourceptr) { for( ; *pDestptr ; ++pDestptr); ..

Call by address

포인터를 사용하는 이유에는 2가지가 있다. 첫째. Call by Address C언어는 Call by Value 만을 지원한다. 이때문에 함수에서 여러개의 값을 조작하여 리턴받기 위해서는 주소를 파마미터로 넘겨 여러개의 값을 조작할 수 있다. ex ) swap() ///////////////////////////////////////////// #include void swap(int* pa , int* pb) { int temp = *pa; *pa = *pb; *pb = temp; } void main() { int a=10 , b=20; printf("a=%d , b=%d\n",a,b); swap(&a , &b); printf("a=%d , b=%d\n",a,b); } /////////////////..