簡體   English   中英

為什么在這段代碼的末尾拋出異常?

[英]Why exception is thrown at the end of this code?

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;
        int* ar1 = new int[n];
        int* ar2 = new int[n];
        /*int ar1[n];
        int ar2[n];*/
        for (int i = 0; i < n; i++) {
            cin >> ar1[i];
        }
        for (int i = 0; i < n; i++) {
            cin >> ar2[i];
        }
        sort(ar1, ar1 + n);
        sort(ar2, ar2 + n, greater<int>());
        int sum = 0;
        for (int i = 0; i < n, k>0; i++) {
            if (ar1[i] < ar2[i]) {
                ar1[i] = ar2[i];
                k--;
            }
        }
        for (int i = 0; i < n; i++) {
            sum += ar1[i];
        }
        cout << sum << "\n";
    }
    return 0;
}

code.exe 中 0x77B6EC75 (ntdll.dll) 處的未處理異常:0xC000000D:將無效參數傳遞給服務或 function。 每當此代碼第一次編譯時,它工作正常,但第二次它拋出異常。 我已在 codeforces 上提交此代碼,並在正確打印所有結果后打印9720301

此循環中的條件是錯誤的:

for (int i = 0; i < n, k>0; i++)

因為即使在i>=n時它也可能會失敗(條件將評估i<n ,忽略它,並且只檢查是否k>0 )。

相反,您需要執行以下操作:

for (int i = 0; i < n && k > 0; i++) 

檢查是否滿足兩個條件。 否則,您可能會索引超出arr1arr2的范圍,這會引發錯誤。 (這實際上是未定義的行為,所以任何事情都可能發生)。

暫無
暫無

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

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