簡體   English   中英

濫用指針會產生分段錯誤。 我仍然不確定如何糾正它

[英]Misuse of a pointer is producing a segmentation fault. I'm still not sure how to correct it though

做了一些閱讀之后,我覺得我明白這里出了什么問題,但我不知道如何解決它。 據我了解,問題在於我如何在第 4 行(強調)中編寫數組的輸入。 問題本身是,當我第一次在任何 IDE 中運行代碼時,它工作正常,但是當我嘗試處理數字時,它會將新數組視為與第一個數組共享大小,即使當它沒有。 似乎我應該以某種替代方式重寫第 4 行,以免濫用指針,但我不確定如何。

using namespace std;

void INSERTIONSORT(int* A) { //THIS IS LINE 4
    int i;
    int key;
    for (int j = 0; j < sizeof(A); j++) {
        key = A[j];
        i = j - 1;
        while (i >= 0 && A[i] > key) {
            A[i + 1] = A[i];
            i = i - 1;
        }
        A[i + 1] = key;
    }
}

void display(int* A) {
    for (int i = 0; i <= sizeof(A)-1; i++)
        cout << A[i] << " ";
    cout << endl;
}

int main() {
    int myArray[] = { 2,1,4,3 };
    cout << "Array before Sorting: ";
    display(myArray);
    INSERTIONSORT(myArray);
    cout << "Array after Sorting: ";
    display(myArray);
    return 0;
}```

這條線是問題所在:

for (int j = 0; j < sizeof(A); j++) {

您需要的是數組的大小(元素的數量),得到的是指針的大小(以字節為單位)(= 4,對於 32 位系統),通常您希望顯式傳遞數組大小或使用一些一種知道自己大小的容器( std::vector )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM