開發平台(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]);
因為這是從書本上照打的
我也比對幾個版本所以先排除書本出錯的的可能性
不知道有哪位大大可以解釋一下出錯的原因?
如果有相關資料讓我能夠深入閱讀會更加感謝
小弟我是做數學演算法的開發
對於資工的軟硬體架構並不是非常了解
還請各位大大見諒