제목의 길이에 제목이 있어서 다 못 적었네요. stack around the variable '배열 이름' was corrupted 오류입니다. <div><br></div> <div>'구조적 프로그래밍을 위한 c언어' 8장 배열 문제들을 풀고 있습니다. 제가 질문하고 싶은 문제는 2개입니다. 첫 번째 문제는 정렬된 순차탐색을 할 때 찾는 목표치가 현재 원소보다 대상이 작으면 탐색을 중단하고 실패로 종료하는 문제입니다. 두 번째 문제는 버블 정렬을 수정하여 리스트가 정렬되자마자 정렬을 멈추는 문제입니다.</div> <div>첫 번째 문제는 우선 크기 15의 배열을 선언한 다음, 난수 함수를 이용해 난수를 배열에 대입했습니다. 그리고 난수를 한개 더 호출해서 임의의 '타겟'에 저장했습니다. 순차탐색을 해서 타겟이 배열에 있으면 타겟을 출력하고, 타겟이 없으면 실패 메시지를 출력하도록 했습니다.</div> <div>두 번째 문제는 크기 15의 배열을 선언해서 난수 함수를 호출해 난수를 배열에 대입했습니다. 함수 내의 버블 정렬도중 임의의 변수를 더 선언해서 리스트가 이미 정렬돼 있으면 정렬을 빠져나오도록 즉, 정렬을 멈추도록 했습니다. 모두 배열을 ary로 선언했습니다.</div> <div><br></div> <div>두 프로그램들을 실행시키니 배열 0번째 즉 ary[0]에는 쓰레기 숫자가 저장돼 있고 오류 메시지가 나왔습니다. 디버깅을 한번 해보니 'stack around the variable 'ary' was corrupted'라는 메시지가 출력됐습니다. 계속 코드를 수정해봐도 어떻게 할지 모르고 물어볼 사람도 없어서 여기에 올려봅니다. 코드는 아래쪽에 있습니다.</div> <div><br></div> <div>첫 번째 코드</div> <div><div>#include <stdio.h></div> <div>#include <stdlib.h></div> <div>#include <time.h></div> <div>#include <stdbool.h></div> <div>#define MAX 15</div> <div><br></div> <div>void selectionSort(int list[], int last);</div> <div>bool seqSearch(int list[], int last, int target, int* locn);</div> <div><br></div> <div>int main(void)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int ary[MAX];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int num = 0, i = 0,temp=0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int target;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int *ptr = #</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>srand((int)time(NULL));</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < MAX; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ary[i] = (rand() % 100);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>target = (rand() % 100);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < MAX; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d ", ary[i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("target: %d \n", target);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>selectionSort(ary, MAX);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < MAX; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d ", ary[i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>seqSearch(ary, MAX, target, &temp);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (ary[temp] == target)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("target found! it is %d \n", target);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("target not found. it is bigger than %d \n", ary[temp]);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div> <div><br></div> <div>void selectionSort(int list[], int last)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int smallest;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int tempdata;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int current = 0, walk=0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (current = 0; current < last; current++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>smallest = current;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (walk = current + 1; walk<=last; walk++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (list[walk] < list[smallest])</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>smallest = walk;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>tempdata = list[current];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>list[current] = list[smallest];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>list[smallest] = tempdata;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return;</div> <div>}</div> <div><br></div> <div>bool seqSearch(int list[], int last, int target, int* locn)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int looker;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int found;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>looker = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while ((looker < last && target != list[looker]) || (looker < last && target > list[looker]))</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>looker++;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*locn = looker;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>found = (target == list[looker]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return found;</div> <div>}</div></div> <div><br></div> <div>두 번째 코드</div> <div><div>#include <stdio.h></div> <div>#include <stdlib.h></div> <div>#include <time.h></div> <div><br></div> <div>#define MAX 14</div> <div><br></div> <div>void bubblesort(int list[], int last);</div> <div><br></div> <div>int main(void)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int ary[MAX];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>srand((int)time(NULL));</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < MAX; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ary[i] = (rand() % 100);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d", ary[i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>bubblesort(ary, MAX);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i = 0; i < MAX; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d ", ary[i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div> <div><br></div> <div>void bubblesort(int list[], int last)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int temp, current, walk;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (current = 0; current < last; current++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (walk = 0; walk <= last; walk++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (list[walk] < list[walk - 1])</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>temp = list[walk];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>list[walk] = list[walk - 1];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>list[walk - 1] = temp;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>i = walk;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (i=walk; i < last; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (list[i] > list[i + 1])</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>break;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return;</div> <div>}</div></div> <div><br></div> <div>모바일에서는 보기 힘드실 수 있겠네요. 지금 대학생 1학년 초보인데 도와주실 수 있나요? ㅠㅠ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.