동적할당을통해 포인터의 크기를 다른함수안에서 바꾸고 싶은데 질문이 있어요.
main이 아닌 다른함수에서 포인터 binary_list의 크기를 바꾸려고하는데 위에 코드처럼 짜면 call by value로 전달되서 main함수안의 binary_list의 크기는 바뀌지 않는다.
이렇게 생각하는데 맞나요? 근데 포인터의 이름은 주소 자체를 가르키잖아요 그럼 매개변수에 포인터이름을 보내면 메개변수도 같은 메모리상의 주소를 가르키는 포인터가 되는거 아닌가요? 더블포인터를 써야되는건가??
동적할당이 포인터가 가르키는 메모리상공간의 크기를 늘리는거 아닌가요?
말머리 질문으로 좀
일단 sizeof(binary_list)는 sizeof(int*)고 이게 원하는 동작은 아닌거 같은데 저렇게 이제 동적 배열 크기 구할 수가 있음? sizeof는 컴파일 타임아닌가 - dc App
초보인지라.. 이게아닌가요?
일단 동적할당은 포인터가 가리키는 곳에 할당한다는 거부터가 잘못된 듯 저건 그냥 메모리공간 주소 반환하는 함수임. 그리고 원하는게 main함수에 있는 binary_list 변수의 주소 값이 바뀌는 거라면 더블포인터로 해야할 듯 여담으로 지정된 주소에 할당하는 함수는 mmap정도 기억나는데 이것도 요청하는 수준이고 이 옵션을 쓰는 코드를 못 봄 - dc App
아 둘 다 malloc인줄 알았네 근데 realloc 리턴값이 달라질 수 있어서 더블포인터로 해야할듯. 만약 공간 부족으로 다른 곳에 할당되었는데 그게 main 함수에 있는 binary_list 변수에는 영향을 안주니까 - dc App
그니까 main에서 선언한 포인터는 임의의 주소를 가르키고있고 init에서의 매개변수에 임의의 주소를 대입했는데, malloc으로 반환한 주소를 매개변수가 가르키는 주소를 바꿨고 결국 main함수내의 binary_list와 매개변수와는 아무런 관계가 없으니 main함수내의 binary_list의 크기에는 변함이 없다 이말씀이신가요?
realloc에서 크기가 부족하지 않다면 굳이 더블포인터를 쓸필요는 없는거네요?
그걸 어떻게 앎. 그리고 저 코드는 애초에 list_n 변수가 1에서 바뀌지 못하기 때문에 의도한대로 안 돌아갈 거임 2번째 파라메터도 포인터로 넘겨주던가 해야함 - dc App
저거는 코드 잘못짠 예임. int *list_init(int n) 이렇게 바꾸던가, void list_init (int **list, int n) 이렇게 바꿔야 함. 두번째꺼 써먹을 때, int *list; list_init (&list, 10); 이런식으로 해야지
그리고 함수를 list_init 이렇게 하지 말고 typedef struct _List { uint8_t *data; size_t data_len; } List; List *list_new(size_t size) void list_free(List *list) 이런 식으로 작성해보셈. list 란 이름도 적절하지 않음. 이름도 적절한 걸루 바꾸고.