반응형
길이가 100인 n개의 문자열을 저장하는데 필요한 동적 메모리를 할당해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> #include <stdlib.h> int main(void) { int count=0; char **p=NULL; int i; printf("문자열의 개수: "); scanf("%d",&count); p=(char**)malloc(sizeof(char*)*count); for(i=0;i<count;i++) { p[i]=(char*)malloc(sizeof(char)*100); } getchar(); for(i=0;i<count;i++) { printf("문자열을 입력하세요: "); gets(p[i]); } printf("\n"); for(i=0;i<count;i++) { puts(p[i]); } for(i=0;i<count;i++) { free(p[i]); } free(p); return 0; } | cs |
p에 동적메모리 할당할 때는 실제 메모리크기는 sizeof(char*) * count 이고
p[i]에 동적메모리 할당할 때 실제 메모리크기는 sizeof(char) * 100 이라는 것을 조심해야합니다.
p와 p[i]는 포인터인고 p[i]는 문자열을 가리키고 p는 문자열의 이름(즉 문자열의 주소)를 가리킵니다.
따라서 크기를 매우 조심해야합니다. 안그러면 오류가 발생합니다. (한마디로 2만큼 받아오고 4만큼 반납을 못시킨다는 말임)
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글
단어 입력 받기 (0) | 2017.02.21 |
---|---|
주소록 저장 (0) | 2017.02.21 |
양의 정수들의 합 (0) | 2017.02.21 |
명령어 라인으로 텍스트 파일 합치기 (0) | 2017.02.18 |
단어 바꾸기 (0) | 2017.02.18 |