메모리 할당에서의 질문입니다.

aiking의 이미지

malloc을 쓰는데에서 문제가 생깁니다.

char setfiles[100][100];

for(i=0;i<100;i++){
setfiles[i]=(char*)malloc(100);
}

에러로 타입이 일치 하지 않는다고 나오는군요~

고수님들 도와주세요~ㅜㅜ

참 그리고
char **setfiles;

setfiles=(char**)malloc(10000);

두 워링이 뜨네요~ 일치하지는 않지만 워링이네요~

vananamilk의 이미지

aiking wrote:
malloc을 쓰는데에서 문제가 생깁니다.

char setfiles[100][100];

for(i=0;i<100;i++){
setfiles[i]=(char*)malloc(100);
}

에러로 타입이 일치 하지 않는다고 나오는군요~

고수님들 도와주세요~ㅜㅜ

참 그리고
char **setfiles;

setfiles=(char**)malloc(10000);

두 워링이 뜨네요~ 일치하지는 않지만 워링이네요~

char setfiles[100][100]; 은 정적 배열을 선언 및 정의구요. 이미 공간은
메모리에 잡혔다는 거구요. 그냥사용하시면 됩니다^

동적할당은...

char **setfiles; 

setfiles = malloc(100 * sizeof *setfiles);
assert(setfiles);

for (i = 0; i < 100; i ++) {
  setfiles[i] = malloc(100 * sizeof **setfiles);
  assert(setfiles[i]);
}

malloc(100 * sizeof *setfiles);는 주소를 담을수 있는 4바이트짜리 공간
100개를 생성한다는 거구요. 400바이트죠...

setfiles[i] = malloc(100 * sizeof **setfiles);는 char를 저장할 수 있는 1바이트
공간 100개를 생성한다는 거구요. 100바이트죠..

그래서 100 x 100 배열이 생성되는겁니다

aiking의 이미지

답변 감사드립니다~^^

그런데 **로 선언할경우 문자를 하나씩 저장하는게 안되네요~ㅠㅠ
배열로 선언할경우 사용이 가능한 방법으로 가르쳐 주시면안될까요?

배열로 선언하고 사이즈를 고정시켜서 선언했는데

타입이 문제가 되네요~

앞에(char*)을 붙여도 그러네요~ㅠㅠ

다시한번 도움 감사드립니다~^^

참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는

쓰레기 값이 들어가서 그럽니다~

메모리 할당외의 초기 선언 방법 있으시면 그것도 저에겐 많은 도움이 될거 같습니다~

아직 씨의 초짜라서~ㅠㅠ

o ji ma! ji rm sin!
삽질의 추억~ㅋ

vananamilk의 이미지

aiking wrote:
답변 감사드립니다~^^

그런데 **로 선언할경우 문자를 하나씩 저장하는게 안되네요~ㅠㅠ
배열로 선언할경우 사용이 가능한 방법으로 가르쳐 주시면안될까요?

배열로 선언하고 사이즈를 고정시켜서 선언했는데

타입이 문제가 되네요~

앞에(char*)을 붙여도 그러네요~ㅠㅠ

다시한번 도움 감사드립니다~^^

참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는

쓰레기 값이 들어가서 그럽니다~

메모리 할당외의 초기 선언 방법 있으시면 그것도 저에겐 많은 도움이 될거 같습니다~

아직 씨의 초짜라서~ㅠㅠ


배열을 잡든 동적할당을 하든 사용방법은

setfiles[0][0] = 'a';
setfiles[0][1] = 'i';  ... or

strcpy(setfiles[0], "aiking");

있구요. 마지막에 '\0' 문자 넣는것 아주 중요하구요.

Quote:
"참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는
쓰레기 값이 들어가서 그럽니다~"

이부분은 잘못 아시구 계신듯 하네요. 배열과 동적할당은
메모리 잡는 공간의 차이죠. 공간잡는 시간이 컴파일시간이냐.
실행시간이냐...

배열 선언할때 다음과 같이 하시면 됩니다.

char setfiles[100][100] = {{'\0', }, };

C 책을 찬찬히 읽어 보시기 바랍니다^

aiking의 이미지

답변 감사드립니다. 다행이 이상한 값들이 나오는건 해결이 되었네요~^^

제가 알기로는 배열의 선언에서 메모리주소를 따로 할당해주지 않으면

메모리에 값이 들어 있는 곳이라도 상관없이 메모리 주소를 할당하는걸로 알고 있습니다.

그래서 초기화 선언을 하지 않을 경우에 해당 메모리에 들어 있던 값들이 출력되는걸로 알고 있었구요~

제가 아직 수련이 부족했나 봅니다~

지금 GTK로 학사 졸업작품을 준비중인데 많은 도움이 되었습니다~ 감사합니다~^^

o ji ma! ji rm sin!
삽질의 추억~ㅋ

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.