이중포인터로 동적할당 도와주세요 ..!
카이
질문 제목 :이중포인터로 동적할당 도와주세요 ..!동적할당 공부중인데 이중포인터 쓰려니까 잘 안되네요...질문 내용 :이중포인터로 동적할당 사용해서 문자열을 무한입력하고 저장하는건데요
char **str=null;
str=(char**)malloc(10);//행, 일단 10개로만 했어요.. 되면 무한으로 되게 수정해야되요
*str=(char*)malloc(21);//열이렇게 선언한다음에for문써서
scanf(%s,*(str+i)); 로 입력을 계속 받고
realloc을 써서 입력받은 문자열 길이만큼 크기 조정해주면서
저장을 하는건데요.. 입력부분이랑 realloc을 어떻게 써야할지 모르겠어요제 생각대로 짠건 오류는 안뜨고 실행은 되는데 입력을 한번하고나서 두번째 입력하면
작동중지 오류가 뜨네요...
-
일본녀
이중포인터 로 동적할당 하시려면 두번째 할당때 포문으로 돌려서 할당 해줘야합니다
-
딥체리
말씀하신건
str이 문자열 저장 공간이고,
str + i가 총 문자열을 저장하는 공간이시라는 말씀?
그렇다면, 거꾸로 만드신것 같군요.
실제로 거꾸로 만드셔야 되고요.
(문자열 배열의 다른 예제들을 많이 보시면 좋을 것 같네요)
그리고 문자열 저장 공간이 sizeof(char)밖에 안된다면,
scanf(\%s\)로는 입력을 받을 수 없습니다.
왜냐면 저장 공간이 한글자 밖에 없으니까요.
scanf(\%c\)로 입력을 받으면서,
(또는 한글자 입력 받 -
희미햬
지금 코딩을 잘못해서 그런건대요.. 10자리에 그냥 sizeof(char)로 바꿧어요.. realloc으로 1씩 늘리면서 문자열 입력한거 저장 하려구요
-
라
21이 문자열의 개수? 문자열의 글자수를 의미하는 건가요? 총 문자열의 수를 의미하는 건가요?
(뒷부분의 코딩은 전자의 의미로 코딩된 것 같군요.)
str=(char**)malloc(10);
이건 역할이 뭔가요? -
곰탱이
21이 입력할 문자열갯수에요 위에껀 그냥 1로하고 realloc으로 +1해줘서 재할당 하려구요
-
푸우
str=(char**)malloc(10);
일단 10개를 만드신다고 하셨는데, 무엇을 10개 만드신거죠?
(행의 역할이 무엇인가요?)
*str=(char*)malloc(21);
여기서도 열은 문자열을 저장하는 공간을 의미하는 것 맞나요?
위에서 10개가 문자열의 수가 10개라는 것을 의미한다면,
10개가 각각 문자열이 저장될 공간이 있어야 하지 않을까요? -
ComeOn
새로운 공간 없이 해보는거라서요.. 햇갈리네요 ㅜ
-
데이비드
F5로 실행해 보시면, 죽는 지점이 realloc이 아니라 scanf에서 죽는다는 것을 확인하실 수 있을겁니다.
그렇다면 문제는 *(str + i)가 문제가 되겠죠.
(아마도 문자열 배열을 만들고 싶으신것 같은데, 문자열을 저장할 공간은 한번만 할당했죠.)
요즘은 디버깅툴이 좋아서, F5, F10으로 원하는 부분까지 실행해서 변수값 확인하는게 아주 편리합니다.
디버깅 툴 사용법을 조금이라도 공부하시면 큰 도움이 될 겁니다.
사족으로 메모리 버리는 공 -
개럭시
#include stdio.h
#include stdlib.h
#include string.h
int main(void)
{
\tchar **str=NULL;
\tint i;
\tstr=(char**)malloc(10);
\t*str=(char*)malloc(21);
\t
\tfor(i=0;;i++)
\t{
\t\tscanf(\%s\ -
핫핑크
전체적인 소스를 봐야 할 것 같은데...
디버깅 해보시면서,
두번째 입력시에 메모리 주소나 할당 공간등을 확인해 보시면 원인을 찾지 않을까 생각되네요.