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

标签 c++ matrix allocation

有件事很困扰我,我真的无法通过互联网找到任何答案(或者至少我不知道如何搜索它)。我一直以为在声明一个矩阵的大小为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/

相关文章:

c++ - 不使用内置函数(如 atoi 或 atof)将字符串转换为 float 或整数

python - 计算矩阵的 log2

c++ - 如何找到大矩阵的行列式

c - 将内存分配给结构内部的指针结构

memory - Lua 用户数据对齐

c++ - 如何运行套接字示例 C++?

c++ - 使用 QDirIterator 递归遍历目录

c++ - 我怎样才能让一个对象知道它在哪个容器中?

r - 将列表的列表转换为矩阵

c++ - 堆栈分配是 RT 吗?