new를 이용한 메모리 동적 배열생성시..

Seven..의 이미지

현재 코드는 이렇습니다.

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이 이십만을 넘어서서 오십만 백만이 되면 그대로
죽어버립니다.
좀더 큰 배열을 사용하고 싶을때는 어떻게 해야 합니까?

dudungsil의 이미지

char* ctmp = [200001];

이 코드가 컴파일이 되나요 -_-?

무슨 용도로 사용을 하시는 지는 모르겠지만 그렇게 커다란 배열은 잡을수 없습니다. 다른 방법을 강구하세요.

그리고 쓸만한 "C" 책을 한권 구입하시는 것도 꼭 필요할것 같군요.

산넘어 산

sozu의 이미지

char* ctmp = new char[....] //이렇게 하면
ctmp[i]=new CHAR;
argv=ctmp;


ctmp[i] = new CHAR;

를 하시는지...

그냥

char *ctmp = new char[argc];
만 하셔도 될것 같구요

argv= ctmp; 도...왜 하셨는지^^;;

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

맹고이의 이미지

일단 문법 부터 확실히 공부해 보시라고

감히 말씀드리고 싶습니다...

Seven..의 이미지

아악 오타가 ...
이리 저리 수정해보다가..
다 고쳐지기 전에 복사를 했네요..

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

doraq의 이미지

ctmp[0] = 'aa';
ctmp[1] = 'bb';

이런식이라구요 ?
상황을 정리하자면 '문자열들의 리스트' 네요...
linked list를 구현하시던지 STL같은 라이브러리를 써도 좋구요.
처음부터 모든 포인터를 가지고 있을 필요는 없겠죠.
갯수가 아주 많은 경우를 말씀하셨으니까요.

다만 모든 구성요소에 한번에 액세스 해야 한다면 얘기가 달라지구요.
그럴땐 hash가 낫겠군요.
자료의 분포와 생성/소멸 주기 액세스 방식 등이 고려되어야 합니다.

Seven..의 이미지

겨우 어떻게 대충 해결이 됐습니다

char** ctmp;
ctmp=new PCHAR [ intvalue ] //이렇게 잡고나서

for(i=0;i<intvalue;i++)
    ctmp[i]=new char;

이렇게 하니 돌아가는군요;; PCHAR라... ㄱ

근 삼사일을 고민했었는데

궁금한건 ctmp[i]=new char;
이렇게 안하면 안되는군요? ;;
**ctmp<--는 값을 가지고 있는데, 즉주소가 있는데
ctmp[i]는 주소가없네요;;

저렇게 해줘도...위에서 잡고 아래서 잡아도..
메모리값들을 보면 그 안에 잡히는듯하네요? 희안하게도-_-ㄱ

사실.... 자료구조를 만드는중이라서요^^
학교 숙제이기도 하고..ㄱ

자료구조를 사용하세요! 라시면;;

크기에 따라 배열을 잡게 되었네요..

덕분에 돌아가기 시작했네요;;
아직도 산더미같은..^^ :lol:

VENI VIDI VICI

alsong의 이미지

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*| -> |실제 문자의 저장 장소|

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.