看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 出自The C Puzzle Book 裡面的範例 #include "stdio.h" struct S1{ char *s; int i; struct S1 *s1p; }; int _tmain(int argc, _TCHAR* argv[]) { static struct S1 a[] = { { "abcd", 1, a+1}, { "efgh", 2, a+2}, { "ijkl", 3, a} }; struct S1 *p = a; int i; for( i=0; i<2; i++) { printf("++a[i].s[3]= %c", ++a[i].s[3]); } return 0; } 這是我們公司同事問的問題 我把這段程式碼放進VC++專案 編譯的時候沒有問題 但是執行結果卻會出現 於 0x000d141b 的 S2.exe 中發生未處理的例外狀況: 0xC0000005: 寫入位置 0x000d574f 時發生存取違規 問題出在 printf("++a[i].s[3]= %c", ++a[i].s[3]); 因為這是從書本上照打的 我也比對幾個版本所以先排除書本出錯的的可能性 不知道有哪位大大可以解釋一下出錯的原因? 如果有相關資料讓我能夠深入閱讀會更加感謝 小弟我是做數學演算法的開發 對於資工的軟硬體架構並不是非常了解 還請各位大大見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.27.70 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1456999447.A.04A.html
Caesar08: [重要] 發文前務必閱讀:常見問題十三誡 第四點 03/03 18:09
ostrichw: 那為何書上會是這樣寫,是舊版編譯器不會檢查 03/03 18:11
ostrichw: 還是C語言編譯器不檢查? 03/03 18:12
LPH66: 是以前的編譯器沒把它放在唯讀的地方而已 03/03 20:52
LPH66: 這個存取違規即是去更改了字串常數的內容 03/03 20:52