2016-11-12 30 views
0

C初學者,遇到一個初始化數組函數的問題。編譯代碼:塊16.01在Windows 10,我在遇到問題的具體代碼:進程以狀態-1073741819中間循環結束?

void initAuction(float auction[2][MAXAUCTIONITEMS]) { 
    int i; 

    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[1][i] = -1; 
     printf("\n%f\t%d\n", auction[1][i], i); 
    }; 
    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[2][i] = 0; 
     printf("\n\n%f\t%d", auction[2][i], i); 
    } 
    printf("\n%f\n", auction[2][70]); 
    return; 
} 

我已經設置了打印語句,看我有多遠在飛機墜毀前獲取和我使其向第二個for循環,但它在i = 140時崩潰。如果我改變常量(等於1000),那麼我可以將它設置爲最高而不會崩潰,這很奇怪。什麼會導致終止狀態-1073741819中間循環時,第一行初始化沒有問題,但第2行選擇崩潰在i = 140左右。

我試着搜索谷歌和這裏似乎終止代碼是不是一個非常特殊的代碼,因爲我已經看到需要一個return語句,試圖訪問的東西不存在,等解決方案真的輸了。

+0

'浮動拍賣[2] [MAXAUCTIONITEMS]':你的第一個維度是大小爲2,但你指數拍賣'拍賣[2] [I]',會出界。請記住,C是基於0的。 – Evert

+0

通常,您應該提交一個演示錯誤的完整程序 - 例如包括一個'main',這個''做了最少量的工作來展現錯誤。 – Hurkyl

+1

使用調試器來解決這些問題。 – Evert

回答

1
超出其界限陣列的

要設置的元素:的auction初始尺寸2,對於這個索引的唯一有效的值是01

您可以修復和簡化代碼是這樣的:

void initAuction(float auction[2][]) { 
    for (int i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[0][i] = -1; 
     auction[1][i] = 0; 
    } 
} 

注意的第二個方面是不是auction類型的一部分,它是由編譯器忽略。

+0

我很欣賞這種迴應。我不完全知道爲什麼你的工作(甚至當我糾正了指數),但我對此刻的一次危機,但肯定要問更多有關分歧,明天如果這不會是一個問題。再次,不能夠感謝你! –

2

有效的指標是auction[0][*]auction[1][*]

+0

所以我嘗試了你的編輯,它仍然在140崩潰,除了現在它似乎像隨機指標在第二行是=隨機值而不是零。此外,其中一些指數現在也包含字母? –