malloc을 쓰는데에서 문제가 생깁니다.
char setfiles[100][100];
for(i=0;i<100;i++){ setfiles[i]=(char*)malloc(100); }
에러로 타입이 일치 하지 않는다고 나오는군요~
고수님들 도와주세요~ㅜㅜ
참 그리고 char **setfiles;
setfiles=(char**)malloc(10000);
두 워링이 뜨네요~ 일치하지는 않지만 워링이네요~
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 배열이 생성되는겁니다
답변 감사드립니다~^^
그런데 **로 선언할경우 문자를 하나씩 저장하는게 안되네요~ㅠㅠ 배열로 선언할경우 사용이 가능한 방법으로 가르쳐 주시면안될까요?
배열로 선언하고 사이즈를 고정시켜서 선언했는데
타입이 문제가 되네요~
앞에(char*)을 붙여도 그러네요~ㅠㅠ
다시한번 도움 감사드립니다~^^
참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는
쓰레기 값이 들어가서 그럽니다~
메모리 할당외의 초기 선언 방법 있으시면 그것도 저에겐 많은 도움이 될거 같습니다~
아직 씨의 초짜라서~ㅠㅠ
o ji ma! ji rm sin! 삽질의 추억~ㅋ
답변 감사드립니다~^^ 그런데 **로 선언할경우 문자를 하나씩 저장하는게 안되네요~ㅠㅠ 배열로 선언할경우 사용이 가능한 방법으로 가르쳐 주시면안될까요? 배열로 선언하고 사이즈를 고정시켜서 선언했는데 타입이 문제가 되네요~ 앞에(char*)을 붙여도 그러네요~ㅠㅠ 다시한번 도움 감사드립니다~^^ 참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는 쓰레기 값이 들어가서 그럽니다~ 메모리 할당외의 초기 선언 방법 있으시면 그것도 저에겐 많은 도움이 될거 같습니다~ 아직 씨의 초짜라서~ㅠㅠ
setfiles[0][0] = 'a'; setfiles[0][1] = 'i'; ... or strcpy(setfiles[0], "aiking");
있구요. 마지막에 '\0' 문자 넣는것 아주 중요하구요.
"참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는 쓰레기 값이 들어가서 그럽니다~"
배열 선언할때 다음과 같이 하시면 됩니다.
char setfiles[100][100] = {{'\0', }, };
C 책을 찬찬히 읽어 보시기 바랍니다^
답변 감사드립니다. 다행이 이상한 값들이 나오는건 해결이 되었네요~^^
제가 알기로는 배열의 선언에서 메모리주소를 따로 할당해주지 않으면
메모리에 값이 들어 있는 곳이라도 상관없이 메모리 주소를 할당하는걸로 알고 있습니다.
그래서 초기화 선언을 하지 않을 경우에 해당 메모리에 들어 있던 값들이 출력되는걸로 알고 있었구요~
제가 아직 수련이 부족했나 봅니다~
지금 GTK로 학사 졸업작품을 준비중인데 많은 도움이 되었습니다~ 감사합니다~^^
텍스트 포맷에 대한 자세한 정보
<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]
Re: 메모리 할당에서의 질문입니다.
char setfiles[100][100]; 은 정적 배열을 선언 및 정의구요. 이미 공간은
메모리에 잡혔다는 거구요. 그냥사용하시면 됩니다^
동적할당은...
malloc(100 * sizeof *setfiles);는 주소를 담을수 있는 4바이트짜리 공간
100개를 생성한다는 거구요. 400바이트죠...
setfiles[i] = malloc(100 * sizeof **setfiles);는 char를 저장할 수 있는 1바이트
공간 100개를 생성한다는 거구요. 100바이트죠..
그래서 100 x 100 배열이 생성되는겁니다
답변 감사드립니다~^^그런데 **로 선언할경우 문자를 하나씩 저장
답변 감사드립니다~^^
그런데 **로 선언할경우 문자를 하나씩 저장하는게 안되네요~ㅠㅠ
배열로 선언할경우 사용이 가능한 방법으로 가르쳐 주시면안될까요?
배열로 선언하고 사이즈를 고정시켜서 선언했는데
타입이 문제가 되네요~
앞에(char*)을 붙여도 그러네요~ㅠㅠ
다시한번 도움 감사드립니다~^^
참 배열로 선언하고도 다시 메모리 할당을 할려는 이유는
쓰레기 값이 들어가서 그럽니다~
메모리 할당외의 초기 선언 방법 있으시면 그것도 저에겐 많은 도움이 될거 같습니다~
아직 씨의 초짜라서~ㅠㅠ
o ji ma! ji rm sin!
삽질의 추억~ㅋ
[quote="aiking"]답변 감사드립니다~^^그런데 **로
배열을 잡든 동적할당을 하든 사용방법은
있구요. 마지막에 '\0' 문자 넣는것 아주 중요하구요.
이부분은 잘못 아시구 계신듯 하네요. 배열과 동적할당은
메모리 잡는 공간의 차이죠. 공간잡는 시간이 컴파일시간이냐.
실행시간이냐...
배열 선언할때 다음과 같이 하시면 됩니다.
C 책을 찬찬히 읽어 보시기 바랍니다^
답변 감사드립니다. 다행이 이상한 값들이 나오는건 해결이 되었네요~^^
답변 감사드립니다. 다행이 이상한 값들이 나오는건 해결이 되었네요~^^
제가 알기로는 배열의 선언에서 메모리주소를 따로 할당해주지 않으면
메모리에 값이 들어 있는 곳이라도 상관없이 메모리 주소를 할당하는걸로 알고 있습니다.
그래서 초기화 선언을 하지 않을 경우에 해당 메모리에 들어 있던 값들이 출력되는걸로 알고 있었구요~
제가 아직 수련이 부족했나 봅니다~
지금 GTK로 학사 졸업작품을 준비중인데 많은 도움이 되었습니다~ 감사합니다~^^
o ji ma! ji rm sin!
삽질의 추억~ㅋ
댓글 달기