ftimes 发表于 2017-9-29 19:15:07

C++数组的奇怪问题

系统:win10
环境:dev-c++/GCC4.9.2


#include <iostream>
using namespace std;
int main(){
       
       
        //输入部分
        int n;//购票次数
        cin>>n;
        int *num=new int ;//每次的购票数量
        for(int i=0;i<n;i++){
                cin>>num;
        }
       
        int count1=0;
        int (*zw)=new int ;//座位表
        for(int i=0;i<20;i++){
                for(int j=0;j<5;j++){
                        ++count1;
                        zw=count1;
                        cout<<"zw["<<i<<"]"<<"["<<j<<"]"<<" = "<<zw<<endl;
                }
        }
               
        cout<<"\n\n\n\n\n\n\n";

        for(int i=0;i<20;i++){
                for(int j=0;j<5;j++){
                        cout<<"zw["<<i<<"]"<<"["<<j<<"]"<<" = "<<zw<<endl;
                }
        }        //数组的值在读取时候发生了变化????



}



本机的运行结果:

zw = 1
zw = 2
zw = 3
zw = 4
zw = 5
zw = 6
zw = 7
zw = 8
zw = 9
zw = 10
zw = 11
zw = 12
zw = 13
zw = 14
zw = 15
zw = 16
zw = 17
zw = 18
zw = 19
zw = 20
zw = 21
zw = 22
zw = 23
zw = 24
zw = 25
zw = 26
zw = 27
zw = 28
zw = 29
zw = 30
zw = 31
zw = 32
zw = 33
zw = 34
zw = 35
zw = 36
zw = 37
zw = 38
zw = 39
zw = 40
zw = 41
zw = 42
zw = 43
zw = 44
zw = 45
zw = 46
zw = 47
zw = 48
zw = 49
zw = 50
zw = 51
zw = 52
zw = 53
zw = 54
zw = 55
zw = 56
zw = 57
zw = 58
zw = 59
zw = 60
zw = 61
zw = 62
zw = 63
zw = 64
zw = 65
zw = 66
zw = 67
zw = 68
zw = 69
zw = 70
zw = 71
zw = 72
zw = 73
zw = 74
zw = 75
zw = 76
zw = 77
zw = 78
zw = 79
zw = 80
zw = 81
zw = 82
zw = 83
zw = 84
zw = 85
zw = 86
zw = 87
zw = 88
zw = 89
zw = 90
zw = 91
zw = 92
zw = 93
zw = 94
zw = 95
zw = 96
zw = 97
zw = 98
zw = 99
zw = 100







zw = 1
zw = 2
zw = 3
zw = 4
zw = 6
zw = 6
zw = 7
zw = 8
zw = 9
zw = 11
zw = 11
zw = 12
zw = 13
zw = 14
zw = 16
zw = 16
zw = 17
zw = 18
zw = 19
zw = 21
zw = 21
zw = 22
zw = 23
zw = 24
zw = 26
zw = 26
zw = 27
zw = 28
zw = 29
zw = 31
zw = 31
zw = 32
zw = 33
zw = 34
zw = 36
zw = 36
zw = 37
zw = 38
zw = 39
zw = 41
zw = 41
zw = 42
zw = 43
zw = 44
zw = 46
zw = 46
zw = 47
zw = 48
zw = 49
zw = 51
zw = 51
zw = 52
zw = 53
zw = 54
zw = 56
zw = 56
zw = 57
zw = 58
zw = 59
zw = 61
zw = 61
zw = 62
zw = 63
zw = 64
zw = 66
zw = 66
zw = 67
zw = 68
zw = 69
zw = 71
zw = 71
zw = 72
zw = 73
zw = 74
zw = 76
zw = 76
zw = 77
zw = 78
zw = 79
zw = 81
zw = 81
zw = 82
zw = 83
zw = 84
zw = 86
zw = 86
zw = 87
zw = 88
zw = 89
zw = 91
zw = 91
zw = 92
zw = 93
zw = 94
zw = 96
zw = 96
zw = 97
zw = 98
zw = 99
zw = 100

在该结果中,第一列是赋值时的输出,第二次是循环输出整个数组,但是所有zw[*]的值在循环输出的时候都出现了问题,例如前面应为12345678910,在循环输出的时候变成了1234    6   678910,为什么所有下标为4的值会在输出的时候发生变化?

新手求教!

Kotori 发表于 2017-9-29 22:29:22

int (*zw)=new int ;//座位表
这一句在后面数组访问中出现行下标19和列下标4的时候越界,访问到了下一个元素, 如zw这个数组元素并不存在,访问的是zw,而zw访问的还是zw,也就重复了。
数组在内存中还是线性的,可以看下C语言的二维数组,传送门-->http://bbs.fishc.com/forum.php?mod=viewthread&tid=70878&extra=page%3D1%26filter%3Dtypeid%26typeid%3D584
因此,按100个座位,应该是
int (*zw)=new int ;//座位表
表示20行5列,行下标是从0-19(共20个),列下标0-4(共5个)

ftimes 发表于 2017-9-29 22:31:23

Kotori 发表于 2017-9-29 22:29
int (*zw)=new int ;//座位表
这一句在后面数组访问中出现行下标19和列下标4的时候越界,访 ...

啊 ~原来自己一直对二维数组的理解有误区,谢谢大佬~
页: [1]
查看完整版本: C++数组的奇怪问题