8000 drlink: destroy方法有问题,不要调试,靠肉眼来排查错误,以此来检测c指针的功力 · home-coder/data-abstraction-001@d3ddca1 · GitHub
[go: up one dir, main page]

Skip to content

Commit d3ddca1

Browse files
author
oneface
committed
drlink: destroy方法有问题,不要调试,靠肉眼来排查错误,以此来检测c指针的功力
1 parent 957d23a commit d3ddca1

File tree

1 file changed

+48
-4
lines changed

1 file changed

+48
-4
lines changed

002-drlink.c

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,13 @@ static void drlink_delete(drlink_data **drldata, unsigned int loc)
104104
}
105105

106106
if (drlp->next == *drldata && loc == 0) { // head 0 0
107+
printf("0\n");
107108
free(drlp);
108109
*drldata = NULL;
109110
return ;
110111
}
111112
if (loc == 0) { //head 0... 1 1
113+
printf("1\n");
112114
temp = drlp->prev;
113115
temp->next = drlp->next;
114116
drlp->next->prev = temp;
@@ -149,6 +151,41 @@ static void drlink_amend(drlink_data *drldata, unsigned int loc, char data)
149151
drlp->data = data;
150152
}
151153

154+
static int drlink_select(drlink_data *drldata, char data)
155+
{
156+
int i = 0;
157+
drlink_data *drlp = drldata;
158+
if (!drlp) {
159+
printf("drlink is not exsit\n");
160+
return ;
161+
}
162+
163+
do {
164+
if (drlp->data == data) {
165+
return i;
166+
}
167+
drlp = drlp->next;
168+
i++;
169+
}while(drlp != drldata);
170+
171+
return -1;
172+
}
173+
174+
static void drlink_destroy(drlink_data **drldata)
175+
{
176+
drlink_data *drlp = *drldata;
177+
drlink_data *temp;
178+
if (!drlp) {
179+
printf("drlink is not exsit\n");
180+
return ;
181+
}
182+
183+
do {
184+
drlink_delete(drldata, 0);
185+
printf("2\n");
186+
}while(!(*drldata));
187+
}
188+
152189
int main()
153190
{
154191
drlink_data *drldata;
@@ -183,10 +220,17 @@ int main()
183220
drlink_show(drldata);
184221
drlink_amend(drldata, 2, 'y');
185222
drlink_show(drldata);
186-
#if 0
187-
drlink_select();
188-
drlink_destroy();
189-
#endif
223+
224+
int loc;
225+
loc = drlink_select(drldata, 'u');
226+
printf("select 'u' in loc %d\n", loc);
227+
loc = drlink_select(drldata, 'p');
228+
printf("select 'p' in loc %d\n", loc);
229+
loc = drlink_select(drldata, 'g');
230+
printf("select 'g' in loc %d\n", loc);
231+
232+
drlink_destroy(&drldata);
233+
drlink_show(drldata);
190234

191235
return 0;
192236
}

0 commit comments

Comments
 (0)
0