gpt4 book ai didi

c++ - 在 C/C++ 中分配和访问矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:57 25 4
gpt4 key购买 nike

有件事很困扰我,我真的无法通过互联网找到任何答案(或者至少我不知道如何搜索它)。我一直以为在声明一个矩阵的大小为SIZE时,矩阵的第一个元素是0,最后一个元素是SIZE-1。但是,在编译时:

#include<cstdio>
#include<cstdlib>
int main()
{
double *r;
r = new double[10];
double dr=0.1;
for(int i=0;i<=10;i++) r[i]=(double)i*dr;
for(int i=0;i<=10;i++) printf("%lf\n",r[i]);
delete [] r; r=0;
return 0;
}

没有错误通知(到目前为止,我已经用 3 个编译器 gnu、dev 和 c-free 尝试过),甚至当我运行 exe 时也没有错误发生。结果是:

0.000000
0.100000
0.200000
0.300000
0.400000
0.500000
0.600000
0.700000
0.800000
0.900000
1.000000---> element SIZE, which means 11, while I have declared 10 elements.

所以,问题是:这怎么可能?!?!?以下是打印地址时的结果:

006E0F88
006E0F90
006E0F98
006E0FA0
006E0FA8
006E0FB0
006E0FB8
006E0FC0
006E0FC8
006E0FD0
006E0FD8---> 11th element

提前致谢。

最佳答案

你是对的,大小为 N 的数组的索引范围从 0N-1(含)。

您正在通过访问超出其范围的数组来调用未定义的行为。这不是编译错误,但运行这样的代码会产生不可预知的结果。

关于c++ - 在 C/C++ 中分配和访问矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com