만약에
int **A; int *C;
이렇게 선언합니다... 그 다음에
A=&C; *A=C;
ㅇ ㅣ 두가지가 다른 것 같더라구요... 저는 처음에 같다고 생각하고 프로그래밍 했는데 위에꺼는 에러가 뜨고 밑에꺼는 잘 되던데요....
왜 위에꺼가 안되는지 가르쳐주세요~
A=&C;
이건 A 자신에다 C의 주소를 저장하는거니까요. 잘 됩니다. 하지만
*A=C;
이것의 의미는 A라는 변수가 가리키고 있는 장소에다가 C라는 변수가 가지는 값을 넣으라는 소리입니다. 이경우 만일 A가 가리키고 있는 장소가 NULL이거나 이상한 장소일경우, 초기화 안한경우.... 이럴때는 문제 생깁니다. 간단한 경우는 세그폴트로 끝나는 경우에서 최악의 경우에는 malloc() 관리 매커니즘이 깨지거나 해서 프로그램이 아주 이상해지는 것까지 다양하죠.
Written By the Black Knight of Destruction
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
둘의 작업은 엄연히 다른 작업입니다.
A=&C;
이건 A 자신에다 C의 주소를 저장하는거니까요. 잘 됩니다.
하지만
*A=C;
이것의 의미는 A라는 변수가 가리키고 있는 장소에다가 C라는 변수가 가지는
값을 넣으라는 소리입니다. 이경우 만일 A가 가리키고 있는 장소가 NULL이거나
이상한 장소일경우, 초기화 안한경우.... 이럴때는 문제 생깁니다. 간단한 경우는
세그폴트로 끝나는 경우에서 최악의 경우에는 malloc() 관리 매커니즘이
깨지거나 해서 프로그램이 아주 이상해지는 것까지 다양하죠.
Written By the Black Knight of Destruction
댓글 달기