:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
17/07/08 16:01
malloc으로 받은 포인터만 free로 해제시킬 수 있습니다.
또한 malloc으로 받은 포인터가 가리키는 메모리 공간 중 일부분만 free로 해제하는 것은 불가능합니다. 따라서 글쓴분이 원하는 것처럼 전화번호를 동적으로 지웠다 썼다 하고 싶다면 realloc으로 하나의 큰 메모리 공간 안에 데이터를 넣지 말고 각 데이터마다 malloc으로 메모리를 할당해줘야겠죠. 구조체 포인터 배열을 만들고 전화번호가 들어오면 배열 하나에 malloc으로 구조체를 만들어서 넣어주는 방식 등으로요.
17/07/08 16:23
아하..;어쩐지 ㅜㅜ 이상하게 네이버 지식인에 검색하고 별 쇼를 다햇는데도 배열 동적할당 해제는 안나오길래 어쩔수없이 여기에 올렷는데..그랬엇군요..
이론상으로는 가능할줄 알앗는데 안되는거엿네요..감사합니다
17/07/08 16:45
나중에 이거 완성하고 봐보겠습니다.문제라서 답을 보면 안될꺼같아요.도움많이 주셔서 정말 감사합니다.
문제풀고 보고 실력 향상에 참조하도록 하겠습니다.정말 감사합니다!
17/07/11 23:57
풀엇슴니다 감사합니다.정말 도움 많이됫습니다.!
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct name{ char name[100]; char phone[100]; }name; int main() { name arr1[100]; name arr2; char subname[100]; int select,height=0,length=0; while(1) { printf("Input Number 1.Insert 2.Delete 3.Search 4.All Print"); scanf("%d",&select); switch(select) { case 1: { printf("Input Name :"); scanf("%s",arr2.name); printf("Input Phone: "); scanf("%s",arr2.phone); arr1[height]=arr2; height++; break; } case 2:{ printf("Delete name : "); scanf("%s",subname); length=0; while(length<=height) { if(!strcmp(subname,arr1[length].name)) { arr1[length]=arr1[length+1]; length++; if(length>=(height-1)) {height--; } } length++; } } break; case 3 :{ printf("Search Name : "); scanf("%s",subname); length=0; while(length<height) { if(!strcmp(subname,arr1[length].name)) { printf("Name : %s",arr1[length].name); printf("Phone : %s",arr1[length].phone); break; } length++; } break; } case 4 :{ length=0; while(length<height) { printf("%d %sn",length+1,arr1[length].name); printf("%d %s",length+1,arr1[length].phone); printf("n"); length++; } break; } } }} 로 만들엇네요
17/07/12 10:38
이렇게 짜도 돌아가긴 하는데 이 코드는 동적할당 없이 미리 구조체 배열을 설정하고 거기에 데이터를 넣는 방식이라 동적할당이 되도록 바꿔보는 것도 공부하는데 좋을 것 같습니다.
17/07/08 16:59
배열 동적할당을 그대로 두시되 배열의 형태를 content**로 content*의 배열로 바꾸시고, 입력이 들어오면 content를 개별로 malloc/free로 할당/해제하는 식으로 하셔도 될 것 같네요.
그리고 본문과 관계는 없지만 옛날에 C를 공부하고 짤 때에는 저도 이렇게 비슷하게 많이 짰었는데, C++과 STL로 삶이 엄청 편해진 것을 새삼 느끼게 되네요.
|