帮主救我!!!
void main()
{ float b[3][2],*p;
int i;
p=b[3];
for(i=0;i<6;i++)
scanf("%f",p+i);
for(i=0;i<6;i++)
printf("%.2f",*(p+i));
}
此程序在BC3.1编译通过。但在运行结束之后会蹦出:执行非法操作,即将交闭...请问是为什么?操作系统:WIN98.
还有:如果将第四行的p=b[3];换成p=b;则会发生编译错误:Cannot convert 'float[2]*' to 'float*'。而在TC2却是正常。又是为什么?
老是被这些鸡毛蒜皮的事弄得神经兮兮,TC和BC我到底要听谁的?! 快要发疯了…………
问题点数:10、回复次数:3Top
1 楼glhorse(happy day)回复于 2001-05-29 09:09:00 得分 10
你的程序存在着严重的越界问题,你对指针还是不够太了解,把 i 改成 i < 2再试试。
还是以 bc 为准吧,bc 比 TC 更能发现程序中潜在的错误。Top
2 楼heiheihei(嘿嘿嘿)回复于 2001-05-29 09:13:00 得分 0
有道理!在下怎么聪明一世,糊涂一时了呢?
多谢指正!
Top
3 楼mazecrazy(Carl)回复于 2001-05-29 09:14:00 得分 0
那你把第四行的
p=b[3];
改成:
p=b[0];
看看。
你犯的错是在C语言里数组的索引是从0开始而不是从1开始。b[3]指向的不是合法的内存空间。
式式看!
Top




