[问题] VC++ 内存问题 求教

楼主: ostrichw (无聊)   2016-03-03 18:04:03
开发平台(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]);
因为这是从书本上照打的
我也比对几个版本所以先排除书本出错的的可能性
不知道有哪位大大可以解释一下出错的原因?
如果有相关资料让我能够深入阅读会更加感谢
小弟我是做数学算法的开发
对于资工的软硬件架构并不是非常了解
还请各位大大见谅
作者: Caesar08 (Caesar)   2016-03-03 18:09:00
[重要] 发文前务必阅读:常见问题十三诫 第四点
楼主: ostrichw (无聊)   2016-03-03 18:11:00
那为何书上会是这样写,是旧版编译器不会检查还是C语言编译器不检查?
作者: LPH66 (-6.2598534e+18f)   2016-03-03 20:52:00
是以前的编译器没把它放在唯读的地方而已这个存取违规即是去更改了字串常数的内容

Links booklink

Contact Us: admin [ a t ] ucptt.com