new를 이용한 메모리 동적 배열생성시..
글쓴이: Seven.. / 작성시간: 월, 2004/03/29 - 8:10오전
현재 코드는 이렇습니다.
argc=test+1; char* ctmp = [200001]; for(i=1;i<=test;i++) ctmp[i]=new CHAR; argv=ctmp;
그런데 이 200001 이 아니라 argc를 사용하고 싶습니다.
그런데 argc를 넣으려고 하면 안들어가요;; 변수라서 그런듯;;
const를 때려도 그렇고..
그렇다고
char* ctmp = new char[....] //이렇게 하면 ctmp[i]=new CHAR; argv=ctmp;
에서 에러가 납니다.
어떻게 해야 할까요..
그리고 이 200001이 이십만을 넘어서서 오십만 백만이 되면 그대로
죽어버립니다.
좀더 큰 배열을 사용하고 싶을때는 어떻게 해야 합니까?
Forums:
[code:1]char* ctmp = [200001];[/
char* ctmp = [200001];
이 코드가 컴파일이 되나요 -_-?
무슨 용도로 사용을 하시는 지는 모르겠지만 그렇게 커다란 배열은 잡을수 없습니다. 다른 방법을 강구하세요.
그리고 쓸만한 "C" 책을 한권 구입하시는 것도 꼭 필요할것 같군요.
산넘어 산
Re: new를 이용한 메모리 동적 배열생성시..
왜
ctmp[i] = new CHAR;
를 하시는지...
그냥
char *ctmp = new char[argc];
만 하셔도 될것 같구요
argv= ctmp; 도...왜 하셨는지^^;;
-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com
일단 문법 부터 확실히 공부해 보시라고감히 말씀드리고 싶습니다..
일단 문법 부터 확실히 공부해 보시라고
감히 말씀드리고 싶습니다...
아악 -_-
아악 오타가 ...
이리 저리 수정해보다가..
다 고쳐지기 전에 복사를 했네요..
char* ctmp[200001];
이렇게였는데 ㅠ.,ㅜargv로 포인터를 바꿔준것은;;
뒤쪽 코드에서.. argv를 쓸일이 있어서요..
저렇게 잡는게 if로 들어가는거라서..
이경우 저렇게 잡고
저렇게 잡지 않는 경우도 있고 해서요..ㄱ
char* ctmp[100];
과 같은
new의 사용법을 여쭤본건데..^^
char* ctmp;
ctmp = new char[100];
이렇게 하면
ctmp[1] [2] 이런게 char가 되더군요 포인터가 아니라..
char한바이트의 공간이 할애되는 것 같습니다.
ctmp[1] 에는 "aa" [2]에는 "bb"이런식으로
문자열을 넣어야되거든요;;
VENI VIDI VICI
ctmp[0] = 'aa';ctmp[1] = 'bb';이런식이
ctmp[0] = 'aa';
ctmp[1] = 'bb';
이런식이라구요 ?
상황을 정리하자면 '문자열들의 리스트' 네요...
linked list를 구현하시던지 STL같은 라이브러리를 써도 좋구요.
처음부터 모든 포인터를 가지고 있을 필요는 없겠죠.
갯수가 아주 많은 경우를 말씀하셨으니까요.
다만 모든 구성요소에 한번에 액세스 해야 한다면 얘기가 달라지구요.
그럴땐 hash가 낫겠군요.
자료의 분포와 생성/소멸 주기 액세스 방식 등이 고려되어야 합니다.
휴..^^
겨우 어떻게 대충 해결이 됐습니다
이렇게 하니 돌아가는군요;; PCHAR라... ㄱ
근 삼사일을 고민했었는데
궁금한건 ctmp[i]=new char;
이렇게 안하면 안되는군요? ;;
**ctmp<--는 값을 가지고 있는데, 즉주소가 있는데
ctmp[i]는 주소가없네요;;
저렇게 해줘도...위에서 잡고 아래서 잡아도..
메모리값들을 보면 그 안에 잡히는듯하네요? 희안하게도-_-ㄱ
사실.... 자료구조를 만드는중이라서요^^
학교 숙제이기도 하고..ㄱ
자료구조를 사용하세요! 라시면;;
크기에 따라 배열을 잡게 되었네요..
덕분에 돌아가기 시작했네요;;
아직도 산더미같은..^^ :lol:
VENI VIDI VICI
char** ctmp;현재는 [b]char* 타입을 가진 변수의
char** ctmp;
현재는 char* 타입을 가진 변수의 어드레스를 담을 공간 하나밖에 할당 되지 않았습니다.
|char**|(4byte일반적으로)
즉 10(가정)개의 char타입을 가진 변수의 어드레스를 담기 위한 메모리를 할당 해야 합니다.
new하지 않으면 필요한 어드레스를 담기 위한 공간이 없겠죠.
ctmp[i]의 어드레스는 아래의 열개를 이야기 하는 거죠.
|char*|char*|char*|char*|char*|char*|char*|char*|char*|char*|
각각에 필요한만큼의 문자를 다시 할당하면 되겠죠. 이부분을 하지 않았서 그 공간에 어드레스 정보가 없는겁니다. char타입을 가진변수의 어드레스를 담기 위한 메모리만 할당했을뿐....
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
|char*| -> |실제 문자의 저장 장소|
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
댓글 달기