배열의 버블 정렬을 구현하는이 코드 조각이 있습니다.벡터 첨자가 범위를 벗어났습니다 - 버블 정렬
UPD : 은이 시점까지 작동 2012 MS VS에서 컴파일되는 나는 충돌이 발생하는 정확한 장소를 추적 검사를 많이 추가했습니다,있는 IT는 다음과 같이이다 : 그것은 처음 두 요소를 교환합니다 배열로, 이러한 요소가 교체로 배열 한 다음 그것을 출력합니다 "확인"하고 있지만, 내 손이 닿지 않는, 뭔가 정말 간단해야합니다
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
int Check(vector<int> Array)
{
printf ("Checking: \n");
for (int i = 0; i < Array.size(); i++)
if((int*) Array[i] == NULL)
{
cerr << "Array [" << i << "] is fubared";
return -1;
}
}
int PrintOut(vector<int> Array)
{
printf ("Your array appears to be as follows: \n");
for (int i = 0; i < Array.size(); i++)
printf("%d ", Array[i]);
return 0;
}
int bubble_sort()
{
int or_size = 2;
int i, j, size, temp;
printf("Specify array size\n");
scanf_s("%d", &size);
printf(" Now, input all elements of the array \n");
vector<int> Array(size, 0);
if (size > or_size)
Array.resize(size);
for (i = 0; i < size; i++)
{
printf("Array [%d] is now re-initialised as ", i);
scanf_s("%d", &temp);
printf("\n");
Array[i] = temp;
}
Check(Array);
PrintOut(Array);
for (i = 1; i < size; i++)
for (j = 0; j < size-i ; j--)
{
printf ("Attempting to swap Array[%d], which = %d, and Array [%d], which = %d \n",j, Array[j], j+1, Array[j+1]);
if (Array[j] > Array[j+1])
{
Array[j]+=Array[j+1];
Array[j+1] = Array[j] - Array[j+1];
Array[j] = Array[j] - Array[j+1];
printf("Swapped \n");
}
PrintOut(Array);
Check(Array);
}
printf ("\n Your Array has been bubble_sorted and should know look like this: \n");
for (i = 0; i < size; i++)
printf("%d ", Array[i]);
Array.clear();
return 0;
}
int main()
{
bubble_sort();
return 0;
}
"범위를 벗어 벡터 첨자"와 충돌 출력한다 . PS 없음 당황 _asm 지금 ;-)
어디에서 충돌이 발생합니까? – jakev
왜 당신은 asm으로 귀찮게합니까? 컴파일러는 가능한 한 그 코드를 훌륭하게 만들 수 있습니다. –
'for (j = size; ...) '루프에서 루프 변수 문제가 있다고 생각합니다 ... 실제로 두 개가 있습니다. 하나는'j' 대신'i'를 사용하고, 다른 하나는' 배열의 끝을 지나가는'size'를 사용하십시오. – twalberg