注册 登录
编程论坛 C++教室

一段总共才40行的代码,莫非灵异了?

hfdss 发布于 2009-07-17 20:48, 800 次点击
我在做一个编程小题目,不过出了一个很奇怪的问题。
我的代码如下。环境为 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 行之内,奇怪的现象就出现了。我就是给一个变量进行了定义并赋值,却把数组中最后一个数的数值给改变了。到底是怎么回事呀?请高手帮我诊断。谢谢了。
8 回复
#2
jackie19182009-07-17 21:01
int i = 1; i <= TotalNumber; i ++   你数据初始化的不对吧,你定义的数组是0~12,但你初始化是1~13。Person [0]没初始化,Person [13]溢出了~~
#3
hfdss2009-07-17 21:07
非常感谢楼上的。
不过有一点我有点疑惑,为什么 Person [13]溢出之后, Counter 编程了 13?
能告诉我么?谢谢。
另外,我刚刚注册不久,不能给你加分,一旦我上网,就给你加。谢谢你。

[[it] 本帖最后由 hfdss 于 2009-7-17 21:18 编辑 [/it]]
#4
jackie19182009-07-17 22:03
你的意思是说你还能编译通过是吗?你数组第一个虽然没复制,但系统还是开辟了一个内存区,内存里原本就有数值所以可以。而你读的Person [13]也是如此~~
#5
niuyufeng2009-07-17 22:10
因为数组和整数都是在堆栈上分配的内存, 数组溢出后,访问和修改的地址实际是 整数 所在的地址. 大概是这样的
#6
y_afu2009-07-18 17:33
好像初学者在数组上下限这方面很容易搞错,C++数组的下限是从0开始到你的数组成员个数减一,有些语言的数组下限是从1开始,所以要注意了。
#7
金多虾2009-08-01 02:26
gaoshou!
#8
wendellzone2009-08-01 10:48
为什么在#include "stdafx.h"处总是会报错那?
#9
pangding2009-08-01 18:32
回复 8楼 wendellzone
我印象里vc05里是不是不需要 stdafx.h 这个头文件了?
1