현재 정렬 알고리즘을 배우고 있으며 문자열 배열을 quicksorting하는 데 문제가 있습니다.C++ txt 파일에서 문자열 배열을 퀵 정렬
내 코드는 다음과 같습니다
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void strQsrt(string * ary, int l, int r);
int main()
{
int i=0;
string temp;
string ary[100];
ifstream input("inputtext.txt");
while(!input.eof())
{
input >> ary[i];
cout << i+1 << " : " << ary[i] << endl;
i++;
};
cout << endl;
strQsrt(ary, 0, 99);
return 0;
}
void strQsrt(string * ary, int l, int r)
{
int i=l, j=r;
string temp;
string mid=ary[ (l+r)/2 ];
while(i <= j)
{
while(ary[i] < mid)
{
i++;
};
while(ary[j] > mid)
{
j++;
};
if(i <= j)
{
temp = ary[i];
ary[i] = ary[j];
ary[j] = temp;
i++;
j++;
};
};
if(l < j)
{
strQsrt(ary, l, j);
};
if(i < r)
{
strQsrt(ary, i, r);
};
for(int c = 0; c < 100; c++)
{
cout << c+1 << " : " << ary[c] << endl;
};
}
I는 알파벳 순서로 백 임의의 이름을 정렬하는 데 노력했다. 이 코드는 제대로 컴파일되지만 세그먼트 오류가 계속 발생합니다.
$ ./binarysearch.exe
1 : Brittny
2 : Margarett
3 : Mariella
4 : Amanda
5 : Isabella
6 : Meghan
7 : Junior
8 : Pamela
9 : Arnette
10 : Toi
11 : Serina
12 : Kim
13 : Peggy
14 : Ellena
15 : Paul
16 : Alica
17 : Keli
18 : Dorine
19 : Conception
20 : Ora
21 : Nakia
22 : Elmer
23 : Teddy
24 : Jacinda
25 : Paris
26 : Beula
27 : Lavette
28 : Marla
29 : Brandi
30 : Neva
31 : Niesha
32 : Dustin
33 : Lane
34 : Season
35 : Norene
36 : Karisa
37 : Johnathon
38 : Dan
39 : Lavenia
40 : Zonia
41 : Chau
42 : Stanton
43 : Patty
44 : Shyla
45 : Elfriede
46 : Leida
47 : Fawn
48 : Karrie
49 : Joanne
50 : Rivka
51 : Roslyn
52 : Cris
53 : Enola
54 : Rafaela
55 : Bula
56 : Teressa
57 : Jackqueline
58 : Antoinette
59 : Lizeth
60 : Torie
61 : Farrah
62 : Stefani
63 : Tamisha
64 : Masako
65 : Margarita
66 : Sandi
67 : Beau
68 : Candelaria
69 : Lia
70 : Tamra
71 : Anne
72 : Lona
73 : Odell
74 : Alethia
75 : Tama
76 : Lina
77 : Carli
78 : Viviana
79 : Dorothy
80 : Rima
81 : Robert
82 : Karolyn
83 : Silvana
84 : Florine
85 : Kandice
86 : Ernesto
87 : Nola
88 : Jasper
89 : Dalia
90 : Lashunda
91 : Ralph
92 : Delois
93 : Mathew
94 : Doretta
95 : Aron
96 : Barrie
97 : Hazel
98 : Lino
99 : Danna
100 : Nancy
Segmentation fault (core dumped)
내가 분할 오류가 잘못된 포인터 사용의 어떤 종류에서 알고,하지만 난 그것을 엉망 어디서 찾을 수 있다고 생각하지 않습니다 : 내가 Cygwin에서이 프로그램을 실행하면 다음과 같습니다. 나는 어디에서 잘못 했는가? 이 오류를 어떻게 해결할 수 있습니까?
_ "하지만 내가 엉망인 곳을 찾을 수 없을 것 같아"_ 디버거에서 코드를 실행하면 발견하는데 도움이됩니다. –
배열 "ary"는 100 개의 문자열 만 저장할 수 있지만 입력 파일의 EOF까지 반복하므로 문자열 번호 101을 저장하면 배열 경계를 덮어 쓰게됩니다 – mooncheese
*이 코드는 제대로 컴파일되지만 세그먼트 오류가 계속 발생합니다. * - 컴파일 프로그램에 버그가 있는지 여부와는 아무런 관련이 없습니다. 버그없는 프로그램을 얻으려면 우리가해야 할 일은 "적절하게 컴파일"하는 것이고, 아무런 프로그램도 버그가 없을 것입니다. – PaulMcKenzie