오유인페이지
개인차단 상태
황금님의 개인페이지입니다
회원가입 : 10-07-01
방문횟수 : 2770회
닉네임 변경이력
일반
베스트
베오베
댓글
817 2014-06-30 18:10:56 0
오랜만에 다시 접속한 마영전. 낫비를 키웁니다. [새창]
2014/06/30 18:07:17
1 이비 캐릭터에 애정을 갖고있긴 한데.. 키우기가 많이 어렵나요?
816 2014-06-29 03:35:13 0
[새창]
추천은 드릴게
815 2014-06-23 18:34:14 0
C 숙련자를 위한 (변태적인) 간단한 문제. [새창]
2014/06/22 11:19:53
와 ㅋㅋ 재밌는거 하나 배워가네요
814 2014-06-15 22:34:59 1
사연이 있는 노래 좀 알려주세요 [새창]
2014/06/15 15:41:06
드렁큰 타이거 - 8:45
http://youtu.be/PAUeXCaP-OQ
813 2014-06-15 00:31:14 0
락, 메탈 잘 아시는분~! 추천 해주세요! [새창]
2014/06/15 00:04:31
http://youtu.be/VMcWJZweha4

이런건 어때요
812 2014-06-14 23:32:52 1
기타와 드럼소리가 매력적인노래? .. 추천좀 부탁드릴게요~ [새창]
2014/06/14 21:03:42
http://youtu.be/W9RZWvuhgHA

http://youtu.be/WhFzTUsaYIg

http://youtu.be/v_09wFxoaeQ

http://youtu.be/BTQQtTU-paU

http://youtu.be/aCyGvGEtOwc

http://youtu.be/CdhqVtpR2ts

http://youtu.be/CSvFpBOe8eY
810 2014-06-10 20:07:01 1
우리 주위에 있는 흔한 여자 [새창]
2014/06/10 18:35:36
흔하게 볼 수 있는 여자 맞네요.. 2D로..
809 2014-06-01 14:06:58 0
방문횟수 확인 [새창]
2014/06/01 12:41:05
.
808 2014-05-29 11:09:14 0
[새창]
아이언멘 방어력 좋아보인다
807 2014-05-25 14:28:31 0
미대에서 A+ 받은 작품 뒷이야기 [새창]
2014/05/24 23:28:49
아 모바일 익숙치않아 반대 잘못 눌렀네요 ㅜㅜ
806 2014-05-22 04:02:05 0
C언어 질문 하나만 드릴게요 ㅠ [새창]
2014/05/21 20:51:02
어쩌다 이리됐지... 궁금한거 있으심 오늘 중 댓글 달아주세요 확인하고 답글 달아드릴게요
805 2014-05-22 04:00:46 1
C언어 질문 하나만 드릴게요 ㅠ [새창]
2014/05/21 20:51:02
동적 할당을 해준다는건 할당 된 객체를 소멸시켜야 한다는 의미이기도 합니다

할당과 소멸을 어디서 할 지를 생각하는게 좋을것같은데요

일단 할당에 대해서는 함수로 보면

dates* CreateData(int day, int month, char* a) {
dates* data = new dates;
data->day = day;
data->month = month;
int len = strlen(a);
data->a = new char[len + 1];
sprintf(data->a, a);
return data;
}

같은 함수를 사용해서 하면 될것같구요 해당 객체의 소멸은

void DeleteData(dates* data) {
delete[] data->a;
delete data;
}

이와 같이 할당 된 객체들을 소멸시켜주는 함수를 만들어 사용하면 될 것 같네요

만약 day 와 month 만 받고 a 는 다른곳에서 따로 받고싶다면 두가지 함수를 모두 수정해야 하는데

이유는 a 가 동적 할당된 상태인데 새로운 할당을 하면서 기존 할당된 메모리가 삭제되지 않을 수 있기 때문이죠

해서 위의 함수들을 약간 변형해서 다음과 같이 만듭니다

dates* CreateData(int day, int month) {
dates* data = new dates;
data->day = day;
data->month = month;
data->a = 0;
return data;
}

void SetString(dates* data, char* a) {
if (data->a != 0) {
delete data->a;
}

int len = strlen(a);
data->a = new char[len + 1];
sprintf(data->a, a);
}

void DeleteData(dates* data) {
if (data->a != 0) {
delete[] data->a;
}
delete data;
}


여기서 a=0; 이라 적힌 부분은 a가 아직 할당되지 않은 상태라는걸 명확히 표현해주는 부분인데요

이는 중복 할당 혹은 중복 제거를 하지 않기 위함입니다.

만약 a에게 무엇인가를 할당 해 주었다면 그 할당 된 주소값을 a가 저장할테지만, a가 0 이라면 아무것도 할당 되지 않은 상태라는 뜻이죠

일반적으로 a=0; 보다는 a=NULL; 을 많이 쓰는데 두개가 같은 것입니다. 요즘 나오는 툴로는 a=nullptr; 를 사용하기도 합니다.


이렇게 datas 의 할당과 소멸을 다루고 나면 다음은 holi 배열의 관리인데요..

holi 라는 배열을 사용하며 CreateData 를 없애고 DeleteData 에서 문자열만 소멸시켜준다던지 하는 방법도 있겠지만...

일단 여기선 datas 라는 객체를 할당 해줬기 때문에 holi 라는 배열 자체를 바꾸겠습니다

여기서는 현재 데이터와 다음 데이터를 연결시켜 리스트를 만들고 그 리스트를 관리하는 작업을 할건데요

일단 리스트의 항목이 될 구조체를 선언합니다

typedef struct _linkdata {
datas* data;
_linkdata* next;
} linkdata;

그리고 자료의 관리를 위한 최초 진입점과 끝점을 하나씩 선언해줍니다.

linkdata* begin = 0;
linkdata* end = 0;

이제 데이터의 관리만 하면 됩니다.

우선 데이터의 생성부분 입니다.

linkdata* Add(int day, int month) {
linkdata* link = new linkdata;
link->data = CreateData(day, month);
link->next = 0;

if (begin == 0) {
begin = end = link;
} else {
end->next = link;
end = link;
}
return link;
}

순서대로 사용할 데이터를 생성해주고, 현재 아무런 데이터가 없다면 시작과 끝을 생성된 데이터로, 어떠한 데이터가 들어있다면 해당 데이터를 마지막 데이터로 설정해주는 부분이죠

데이터의 삭제는

void Remove(dates* data) {
if (begin == 0) {
return;
}

if (data == begin->data) {
linkdata* next = begin->next;
delete begin;
DeleteData(data);

begin = next;
} else {
linkdata* iter = begin;
while (iter->next != 0) {
if (iter->next->data == data) {
linkdata* next = iter->next->next;
delete iter->next;
DeleteData(data);

iter->next = next;
break;
}
iter = iter->next;
}
}
}


정도로 하면 되겠네요..

..음... 잠자기전에 심심풀이로 살짝 만져본게 여기까지 와버렸네요...........

코드는 최대한 어려운 코드를 배제했구요..

그냥 댓글창에서 바로 적은거라 에러가 있을지도 몰라요 적당히 분석 해보며 이해를 하고 사용하는걸 권장합니다

실제 사용부분 예문으로 하나 적어두고 턴을 마치겠습니다.


#include <stdio.h>
#include <string.h>

typedef struct {
int month, day;
char *a;
}dates;

typedef struct _linkdata {
dates* data;
_linkdata* next;
} linkdata;

dates* CreateData(int day, int month);
void SetString(dates* data, char* a);
void DeleteData(dates* data);

linkdata* Add(int day, int month);
void Remove(dates* data);

linkdata* begin = 0;
linkdata* end = 0;

void main() {
linkdata* current = Add(1, 5);
SetString(current->data, "오월 일일");
current = Add(2, 5);
SetString(current->data, "오월 이일");
current = Add(3, 5);
SetString(current->data, "오월 삼일");

current = Add(20, 5);
SetString(current->data, "오월 이십일");
Remove(current->data);

current = begin;
while (current != 0) {
printf("%s, [%d월 %d일]n", current->data->a, current->data->month, current->data->day);
current = current->next;
}

current = begin;
while (current != 0) {
Remove(begin->data);
current = begin;
}
}
804 2014-05-21 22:25:14 0
이뇨 동영상 [새창]
2014/05/21 19:42:42
해보고싶다!!
803 2014-05-21 13:48:34 2
유혹하는 김연아 [새창]
2014/05/20 22:16:30
설마 빵을 저렇게 유혹하겠어 했는데 정말 빵이였네
< 이전페이지 다음페이지 >
< 21 22 23 24 25 >
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호