結論:みんな本当にありがとう!以下に投稿されたすべての回答は正しかった。最初のエラーは、NULL ターミネータの余地を残すのを忘れていたことです。Strcpy() は危険な関数です。なぜなら、私がそれを使用したとき、「文字列」の終わりがいつなのかわからなかったからです。そのため、strcpy() は多くのデータを取得し、戻りアドレスを上書きしました。
編集:プログラムからさらにコードを追加
解決済み: 正直なところ、私の最初の実装はくだらないものでした。配列の要素をスワップアウトしたいのに、なぜそのように swap を書いたのかさえわかりません。(当時、各要素には a char 配列しかありませんでした。そのため、古い実装で逃げることができました)。私はそれを次のように書き直しました:
void swap(ArrayElement list[], int index1, int index2) {
ArrayElement temp;
temp = list[index1];
list[index1] = list[index2];
list[index2] = temp;
}
次の関数の最後にあるセグメンテーション違反に問題があります。
struct ArrayElement {
char data[SIZE_OF_ELEMENT];
// Implemented this way so that I can expand to multiple values later on
}
//In main:
ArrayElement* list = new ArrayElement[NUM_OF_ELEMENTS];
void swap(ArrayElement list[], int index1, int index2) {
char temp[SIZE_OF_ELEMENT];
strcpy(temp, list[index2].data);
strcpy(list[index2].data, list[index1].data);
strcpy(list[index1].data, temp);
}
エラーは、関数の終了中かっこである 45 行目のセグメンテーション違反です。これは g++ を使用してコンパイルされました。gbd を使用してデバッグを試みたところ、中括弧に到達するまですべてが正しく機能しました。
必要に応じて、プログラムからさらにコードを提供できます。これはクラス用なので、すべてを投稿したくありません。