[[프로그래밍_NOTE]] 124

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)을 삽입하는 과정에서 다른 변수의 영역을 침범하기..

atof() [01.04.24]

문자열을 가지고 float형으로 출력하는 함수 프로그래밍. /************************************ written SeungHwan File of MyAtof() 2008.08.19 ************************************/ #include #include void Count_MyAtof(char* ptr , int* pmark , int* piValueCount , int* pdValueCount) { if(*ptr == '-') { *pmark = 1; ptr++; } while((*ptr) != NULL) { while((*ptr) != '.') {//정수부분 (*piValueCount)++; ptr++; } ptr++; //소수점 지나가기 whi..

멀티포인터 [01.04.25]

※ 다음의 포인터 함수를 설명하시오. ////////////////////////////// char *(*(*p)())[5]; ////////////////////////////// sol) 포인터 변수 p는 리턴값이 포인터인 함수를 호출하고, 그 함수의 리턴값은 요소가 5개인 배열을 가리키며, 그 배열의 각 요소들은 char 형 포인터를 가리킨다. ※ 다음의 포인터 함수를 설명하시오. ////////////////////////////// char **(*p[])(); ////////////////////////////// sol) 배열 p에는 주소값이 저장되어 있고, 배열의 각 요소는 리턴값이 포인터인 함수를 가리키고, 그 리턴값은 char 형 포인터를 가리킨다.

단축연산 [01.04.25]

※ 다음의 출력값을 예상하고 이유를 기술하시오. /////////////////////////////////////////////// #include void main() { int x=1 , y=-1 , z=2; printf("%d\n", ++x||++y&&++z); printf("%d %d %d \n " , x,y,z); } /////////////////////////////////////////////// [ result ] (출력) 1 2 -1 2 [ analysis ] 단축평가 - || 연산자 앞이 참이면 항상 참이므로, ++x 의 연산은 이루어진뒤 전체 값은 항상참(1)으로 셋팅되고 그 이후는 연산되지 않는다. /////////////////////////////////////////////..