2017-06-01 99 views
-1

我試圖寫txt文件,但該程序後,編寫了幾乎整個文本,我得到了一個錯誤:未處理的異常在0x0F6F8EF7(msvcr120d.dll)0000005:訪問衝突讀取位置0x091C5B30

Unhandled exception at 0x0F6F8EF7 (msvcr120d.dll) 0xC0000005: Access violation reading location 0x091C5B30.

跟蹤設置爲:

trace = fopen("trace.txt", "w"); 

ARR設置爲:

int arr[18]; // (also all of the arr values initial to zero.) 

for (i = 0; i < 18; i++){ 
    fprintf(trace, "%08x ", arr[i]); 
} 
+2

您是否試圖在調試器中運行調試版本以捕捉崩潰,以便您可以在代碼中準確找到它發生的位置?當它發生時檢查涉及的變量,以確保它們都可以嗎?也許你應該花一些時間閱讀[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)? –

+1

我的水晶球告訴我「trace」是無效的'FILE *',因爲文件由於某種原因無法打開。請說明如何初始化trace。 –

+1

或者'arr'可能有問題。什麼是'arr'?它是如何聲明的?它是如何初始化的? –

回答

2

在這裏,我的猜測是,該循環正在迭代超過預期,導致arr [i]超出其固定大小。除此之外,問題可能出現在跟蹤初始化中。請提供有關這些信息!

這爲我工作:

int i; 
int mark[5] = {19, 10, 8, 17, 9}; 
FILE *trace = fopen("C:\\trace.txt", "w"); 
if (trace == NULL) 
{ 
     printf("Error opening file!\n"); 
} 
for(i = 0; i <= 4; i++){ 
    fprintf(trace,"%d ", mark[i]); 

} 
fclose(trace); 

結果:

enter image description here

後更新的Post: 要正確遍歷改編[18]你的for循環應該像這個:

for(i = 0; i <= 17; i++) 

這是因爲當你用18個元素定義數組時,你可以使用從arr [0]到arr [17]的元素。

如果你看看我上面的例子,這裏是相同的代碼片段的結果,但在運行了這樣的循環:

for(i = 0; i <= 5; i++)  

注意,我已經改變我< = 4我< = 5;

結果:

enter image description here

正如你可以看到我們的訪問元素之外數組的邊界,導致程序寫的垃圾在文本文件中。

相關問題