| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 800 人关注过本帖
标题:一段总共才40行的代码,莫非灵异了?
只看楼主 加入收藏
hfdss
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2009-7-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
一段总共才40行的代码,莫非灵异了?
我在做一个编程小题目,不过出了一个很奇怪的问题。
我的代码如下。环境为 Vista + VC2005 Express

#include "stdafx.h"
#include <iostream>
#include <string>   
#include <stdlib.h>
#include <math.h>

using namespace System;
using namespace std;

#define TotalNumber 13    //定义总人数
#define Step 3            //定义剔除的步长

void main(){
        int Person [TotalNumber] = {};    //定义人的数量,用数组实现。
        int pointer = Step;                //定义退出的数字指针。但不是指针类型。

        for (int i = 1; i <= TotalNumber; i ++) {
            //进行数据初始化。
            Person [i] = i;
            cout << Person [i] << endl;
        }
            cout << endl << Person [TotalNumber] << endl;    //**********到这里还没有变**************
        int Counter = 0;    //用于限定循环次数
            cout << endl << Person [TotalNumber] << endl;    //***********到这里就变了***************
        while (Counter < 1) {
            pointer = pointer % TotalNumber;    //只要超过总数,就从头开始。
            if (Person [pointer] != 0) {
                //如果正好不是 0,也就是说,应该退出
                Person [pointer] = 0;            //修改为 0,让他退出
                pointer = pointer + Step;        //指针后移一个步长。
            }
            else {
                //如果正好是 0,也就是说,这个位置的人已经退出了
                pointer ++;        //指针后移一个位置。
            }
            Counter ++;
        }
        system("pause");
}
在第 22 行和第 24 行之内,奇怪的现象就出现了。我就是给一个变量进行了定义并赋值,却把数组中最后一个数的数值给改变了。到底是怎么回事呀?请高手帮我诊断。谢谢了。
搜索更多相关主题的帖子: 灵异 代码 
2009-07-17 20:48
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
收藏
得分:15 
int i = 1; i <= TotalNumber; i ++   你数据初始化的不对吧,你定义的数组是0~12,但你初始化是1~13。Person [0]没初始化,Person [13]溢出了~~
2009-07-17 21:01
hfdss
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2009-7-17
收藏
得分:0 
非常感谢楼上的。
不过有一点我有点疑惑,为什么 Person [13]溢出之后, Counter 编程了 13?
能告诉我么?谢谢。
另外,我刚刚注册不久,不能给你加分,一旦我上网,就给你加。谢谢你。

[[it] 本帖最后由 hfdss 于 2009-7-17 21:18 编辑 [/it]]
2009-07-17 21:07
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
收藏
得分:0 
你的意思是说你还能编译通过是吗?你数组第一个虽然没复制,但系统还是开辟了一个内存区,内存里原本就有数值所以可以。而你读的Person [13]也是如此~~
2009-07-17 22:03
niuyufeng
Rank: 2
等 级:论坛游民
帖 子:12
专家分:85
注 册:2009-7-17
收藏
得分:3 
因为数组和整数都是在堆栈上分配的内存, 数组溢出后,访问和修改的地址实际是 整数 所在的地址. 大概是这样的
2009-07-17 22:10
y_afu
Rank: 2
等 级:论坛游民
帖 子:17
专家分:62
注 册:2009-7-7
收藏
得分:2 
好像初学者在数组上下限这方面很容易搞错,C++数组的下限是从0开始到你的数组成员个数减一,有些语言的数组下限是从1开始,所以要注意了。
2009-07-18 17:33
金多虾
Rank: 2
等 级:论坛游民
帖 子:153
专家分:99
注 册:2009-6-9
收藏
得分:0 
gaoshou!
2009-08-01 02:26
wendellzone
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2009-7-22
收藏
得分:0 
为什么在#include "stdafx.h"处总是会报错那?
2009-08-01 10:48
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 8楼 wendellzone
我印象里vc05里是不是不需要 stdafx.h 这个头文件了?
2009-08-01 18:32
快速回复:一段总共才40行的代码,莫非灵异了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027189 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved