Ich trainiere mich gerade für Sortieralgorithmen, und ich habe ein Problem mit QuickSorting ein String-Array.C++ Schnelles Sortieren eines String-Arrays aus einer TXT-Datei
Mein Code sieht wie folgt aus:
#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;
};
}
ich versuchte hundert zufälligen Namen in alphabetischer Reihenfolge zu sortieren. Dieser Code wird ordnungsgemäß kompiliert, aber ich erhalte immer einen Segmentierungsfehler. Wenn ich dieses Programm in CygWin laufen, sieht es wie folgt aus:
$ ./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)
ich Segmentierungsfehler wissen aus irgendeiner Art von schlechten Zeiger Nutzung ist, aber ich glaube nicht, dass ich finden kann, wo ich es vermasselt. Wo habe ich falsch gemacht? Wie kann ich mit diesem Fehler umgehen?
_ "aber ich glaube nicht, dass ich finden kann, wo ich es vermasselt habe" _ Das Ausführen von Code im Debugger ist äußerst hilfreich, um das herauszufinden. –
Ihr Array "ary" kann nur 100 Strings speichern, aber Sie iterieren bis EOF der Eingabedatei, so Speichern von String Nummer 101 verursacht Schreiben über Array-Grenzen – mooncheese
* Dieser Code kompiliert richtig, aber ich bekomme immer einen Segmentierungsfehler. * - Kompilieren hat eigentlich nichts damit zu tun, ob Ihr Programm Bugs hat oder nicht. Wenn alles, was wir tun müssen, um fehlerfreie Programme zu bekommen, "richtig kompilieren" ist, dann würde kein Programm Fehler haben. – PaulMcKenzie