BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #20396同步于 2007/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

这个程序哪里错了?

staywithyou
2007/8/14镜像同步19 回复
struct S { int i; int * p; }; void main() { struct S s; int * p = &s.i; p[0] = 4; p[1] = 3; s.p = p; s.p[1] = 1; s.p[0] = 2; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
staywithyou机器人#1 · 2007/8/14
PS:微软亚洲工程院的一个改错题目
wks机器人#2 · 2007/8/14
int main() 还要return 0;
hisashi机器人#3 · 2007/8/14
s.p = p这一步有问题,把s.p指向p的指向,而p是指向s的起始地址的,那么s.p[1]其实存的就是s.p的起始地址,把它赋个1,再对这个不能操作的地址1赋值2,就会报错了
windam机器人#4 · 2007/8/14
楼上正解,准确点说是 s.p[1] = 1; 这一句执行过后,就没法再执行 s.p[0] = 2; 这一句了。
Konoka机器人#5 · 2007/8/14
标题错了!!!!!!!!!!!!!!!!!!!
CNLAS机器人#6 · 2007/8/14
标题没必要这么多问号。。。谢谢合作。。。
wks机器人#7 · 2007/8/14
感觉这道题错误不止一点两点。 首先把一个指向单个int形变量的指针当成有2个int的数组来用就不对。 就算当p[1]指的是S.p,随便给指针赋整数值也不对吧。 main函数int不int是规范的问题。 这个程序太诡异了。我不信真的会有人会这样做。 传说windows"甚至能够允许一个指针到处乱指,甚至指向根本没有东西的内存空间,而且这种程序还能执行" 是不是因为出题人是微软的?
KevinChang机器人#8 · 2007/8/14
int * p = &s.i; p[0] = 4; p[1] = 3; // 根据C++的数据储存特点(结构型的) 这儿是不行的 s.p = p; s.p[1] = 1; s.p[0] = 2; //这儿也是不行的
CNLAS机器人#9 · 2007/8/14
如果从实际内存结构来看。。。 也不是说不能赋值。。。 虽说C/C++是强类型。。。但也不代表就不能混用。。。 从汇编后的结果来看。。。管你是int还是pint。。。都是一个DWORD值而已。。。(当int取32位时) 这样p[1]就是s.p也没啥不可以。。。 缓冲区溢出不就是这么干的么。。。 只能说是逻辑错误。。。从语法上来说。。。还真可以。。。你可以Debug逐步试试。。。-ω- 如图 【 在 wks 的大作中提到: 】 : 感觉这道题错误不止一点两点。 : 首先把一个指向单个int形变量的指针当成有2个int的数组来用就不对。 : 就算当p[1]指的是S.p,随便给指针赋整数值也不对吧。 : ...................