結論:非常感謝大家!下面發佈的所有回覆都是正確的。最初的錯誤是我忘記爲NULL終止符留下空間。 Strcpy()是一個危險的函數,因爲當我使用它時,它不知道'string'的結尾是什麼時候。因此,strcpy()獲取了很多數據並覆蓋了返回地址。函數結束時的C++ Seg Fault。參考線=右大括號
編輯:增加了更多的代碼解決方案
:說實話,我最初的實現是廢話。我甚至不知道爲什麼我要這樣寫交換,如果我想換出數組的元素。 (當時,每個元素只有一個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來嘗試和調試它,一切正常工作,直到它碰到大括號。
如果需要,我可以從程序中提供更多的代碼。我不想發佈整個事情,因爲這是一個班級。
'std :: swap(list [index2] .data,list [index1] .data)'這會爲你工作,只是出於好奇。 – andre
你應該至少顯示你調用該函數的上下文以及什麼'ArrayElement' ... –
你試過了你的調試器嗎? –