게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
'stack around '배열 이름' ~~ 어떻게 하나요?
게시물ID : programmer_18591짧은주소 복사하기
작성자 : rumingTURTLE
추천 : 0
조회수 : 416회
댓글수 : 0개
등록시간 : 2016/10/03 14:28:12
제목의 길이에 제목이 있어서 다 못 적었네요.  stack around the variable '배열 이름' was corrupted 오류입니다.

'구조적 프로그래밍을 위한 c언어' 8장 배열 문제들을 풀고 있습니다. 제가 질문하고 싶은 문제는 2개입니다. 첫 번째 문제는 정렬된 순차탐색을 할 때 찾는 목표치가 현재 원소보다 대상이 작으면 탐색을 중단하고 실패로 종료하는 문제입니다. 두 번째 문제는 버블 정렬을 수정하여 리스트가 정렬되자마자 정렬을 멈추는 문제입니다.
첫 번째 문제는 우선 크기 15의 배열을 선언한 다음, 난수 함수를 이용해 난수를 배열에 대입했습니다. 그리고 난수를 한개 더 호출해서 임의의 '타겟'에 저장했습니다. 순차탐색을 해서 타겟이 배열에 있으면 타겟을 출력하고, 타겟이 없으면 실패 메시지를 출력하도록 했습니다.
두 번째 문제는 크기 15의 배열을 선언해서 난수 함수를 호출해 난수를 배열에 대입했습니다. 함수 내의 버블 정렬도중 임의의 변수를 더 선언해서 리스트가 이미 정렬돼 있으면 정렬을 빠져나오도록 즉, 정렬을 멈추도록 했습니다. 모두 배열을 ary로 선언했습니다.

두 프로그램들을 실행시키니 배열 0번째 즉 ary[0]에는 쓰레기 숫자가 저장돼 있고 오류 메시지가 나왔습니다. 디버깅을 한번 해보니 'stack around the variable 'ary' was corrupted'라는 메시지가 출력됐습니다. 계속 코드를 수정해봐도 어떻게 할지 모르고 물어볼 사람도 없어서 여기에 올려봅니다. 코드는 아래쪽에 있습니다.

첫 번째 코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define MAX 15

void selectionSort(int list[], int last);
bool seqSearch(int list[], int last, int target, int* locn);

int main(void)
{
int ary[MAX];
int num = 0, i = 0,temp=0;
int target;
int *ptr = &num;

srand((int)time(NULL));

for (i = 0; i < MAX; i++)
ary[i] = (rand() % 100);

target = (rand() % 100);

for (i = 0; i < MAX; i++)
printf("%d ", ary[i]);
printf("\n");

printf("target: %d \n", target);
selectionSort(ary, MAX);
for (i = 0; i < MAX; i++)
printf("%d ", ary[i]);
printf("\n");
seqSearch(ary, MAX, target, &temp);
if (ary[temp] == target)
printf("target found! it is %d \n", target);
else
printf("target not found. it is bigger than %d \n", ary[temp]);

return 0;
}

void selectionSort(int list[], int last)
{
int smallest;
int tempdata;
int current = 0, walk=0;

for (current = 0; current < last; current++)
{
smallest = current;
for (walk = current + 1; walk<=last; walk++)
if (list[walk] < list[smallest])
smallest = walk;
tempdata = list[current];
list[current] = list[smallest];
list[smallest] = tempdata;
}
return;
}

bool seqSearch(int list[], int last, int target, int* locn)
{
int looker;
int found;

looker = 0;
while ((looker < last && target != list[looker]) || (looker < last && target > list[looker]))
looker++;

*locn = looker;
found = (target == list[looker]);
return found;
}

두 번째 코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX 14

void bubblesort(int list[], int last);

int main(void)
{
int i = 0;
int ary[MAX];

srand((int)time(NULL));

for (i = 0; i < MAX; i++)
{
ary[i] = (rand() % 100);
printf("%d", ary[i]);
}
printf("\n");

bubblesort(ary, MAX);

for (i = 0; i < MAX; i++)
printf("%d ", ary[i]);
printf("\n");
return 0;
}

void bubblesort(int list[], int last)
{
int temp, current, walk;
int i;

for (current = 0; current < last; current++)
{
for (walk = 0; walk <= last; walk++)
if (list[walk] < list[walk - 1])
{
temp = list[walk];
list[walk] = list[walk - 1];
list[walk - 1] = temp;
i = walk;
}
for (i=walk; i < last; i++)
{
if (list[i] > list[i + 1])
break;
else
{
break;
break;
}
}
}
return;
}

모바일에서는 보기 힘드실 수 있겠네요. 지금 대학생 1학년 초보인데 도와주실 수 있나요? ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호