함수내에서 더블포인터를 인자로 주었을시에...알수없는 오류
글쓴이: jongyoungcha / 작성시간: 금, 2012/11/23 - 12:08오전
#include
#include
void memory(int num, int **pp){
pp = (int*)malloc(sizeof(int)*4);
*pp[0] = 1;
*pp[1] = 2;
*pp[2] = 3;
}
int main(){
int num = 8;
int* p = NULL;
memory(num, p);
return 0;
}
이부분에서 더블포인터를 사용해서 하면 오류가 납니다.
그러나 함수내에서 인자값에 더블 포인터가 아니라 그냥 포인터를 올리면 에러가 나지 않는데요
이것이 왜 그런것 인가요.... 부탁드려용 ㅠ
Forums:
냉 그렇습니다
여기서 더블 포인터를 써서 동적할당을 할 때 까지는 에러가 나지 않지만
저 포인터 값에 정수 값을 넣어주면 그대로 에러가 나게 됩니다. 왜그런지 알 수 있을까요? ㅠㅠ
&p, *pp 겠죠. 컴파일러 메시지만 잘 읽어도
&p, *pp 겠죠.
컴파일러 메시지만 잘 읽어도 대부분 문제는 풀릴텐데.....
아 맞긴합니다만
아 죄송합니다 저기 memory 함수 호출 부분은 memory(num, &p);입니다. 죄송합니다. 하지만 제가 질문 드리고 싶은 부분은 저게 아니라
저기 함수에 인자인 **pp는 포인터 포인터 변수를 가리키는 변수입니다. 따라서 인자에 값을 대입하면 **pp = &p 이므로
결국 *pp의 값은 main에 선언한 *p가 가르키는 변수의 주소값을 가르키는 결로 알고있습니다 따라서
int *p;
p = (int*)malloc(sizeof(int));
이거나
int *p;
int **pp = &p;
*pp = (int*)malloc(sizeof(int));
이거나 같은 연산이 아닌가 싶은데
코드를 돌려보면 알 수 없는 에러라고 하면서 종료가 됩니다. 이부분이 전 정말 이해가 되지 않아서요 ㅠ
*p = malloc p[0] = 1 에 대응되는
에 대응되는 코드는
이겠지요..
실질적으로 함수내에서 malloc할당을 할때는 문제가
실질적으로 함수내에서 malloc할당을 할때는 문제가 생기지 않습니다만은
함수내에서 할당된 값에 정수를 대입할때는 에러가 납니다. ㅠ
이렇게 사용하나 봅니다.
포인터를 함수인자값에서 참조하기 위해서는. &를 사용해야 하는데. 그걸 잘 못해서. 외부에서 malloc 해줬습니다.
함수 내부에서 malloc 하고 싶다면. return 값으로 주어도 되어 보입니다.
아니면. 그냥 & 인자가 되는 포인터 하나만 별도로 주어도 될것 같습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
답변주신분들 넘넘 감사합니다 감사합니다.
답변주신분들 넘넘 감사합니다 감사합니다. ㅠ
#include
#include
void memory(int num, int **pp) {
*pp = (int*) malloc(sizeof(int) * 4);//제가 급하게 올리다 보니 더블포인터 변수인 pp에 * 를넣지 않앗습니다. ㅠ
(*pp)[0] = 1;//qiiiiiip님 말씀대로 괄호를 여기다 주니까 되네요
(*pp)[1] = 2;
(*pp)[2] = 3;
}
int main() {
int num = 8;
int* p = NULL;
memory(num, &p);
printf("%d\n", p[0]);
printf("%d\n", p[1]);
printf("%d\n", p[2]);
return 0;
}
감사합니다.
답변주신분들 감사합니다.문제를 찾았는데요 ㅠ 제가
답변주신분들 감사합니다.
문제를 찾았는데요 ㅠ 제가 급하게 올리느라 문제가 잘못올려졌네요
#include
#include
void memory(int num, int **pp) {
*pp = (int*) malloc(sizeof(int) * 4);//이부분에서 제가 *를 빼먹엇어서 pp앞에 *값을 넣었습니다.
(*pp)[0] = 1;//qiiiiiiiiiip님 말씀대로 더블 포인터 쪽에 괄호로 감싸니까 컴파일 에러가 없어졌습니다. 컴파일러의 수직 우선순서가 문제였나보내요 ㅠ
(*pp)[1] = 2;
(*pp)[2] = 3;
}
int main() {
int num = 8;
int* p = NULL;
memory(num, &p);
printf("%d\n", p[0]);
printf("%d\n", p[1]);
printf("%d\n", p[2]);
return 0;
}
댓글 달기