[問題] VC++ 記憶體問題 求教

看板C_and_CPP作者 (無聊)時間9年前 (2016/03/03 18:04), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
開發平台(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

03/03 18:09, , 1F
[重要] 發文前務必閱讀:常見問題十三誡 第四點
03/03 18:09, 1F

03/03 18:11, , 2F
那為何書上會是這樣寫,是舊版編譯器不會檢查
03/03 18:11, 2F

03/03 18:12, , 3F
還是C語言編譯器不檢查?
03/03 18:12, 3F

03/03 20:52, , 4F
是以前的編譯器沒把它放在唯讀的地方而已
03/03 20:52, 4F

03/03 20:52, , 5F
這個存取違規即是去更改了字串常數的內容
03/03 20:52, 5F
文章代碼(AID): #1Ms0mN1A (C_and_CPP)