访问无限数组元素
Access to infinite array elements?
我试着理解指针。问题是:在编译第二个for循环时,我不应该得到分段错误吗?如果没有,为什么不呢?我无法阻止对y[0][dim]以外的元素的访问。
int main(){
int dim = 3;
int ordnung = 2;
double** y = new double*[ordnung];
for(int i = 0; i<ordnung; i++){
y[i] = new double[dim];
}
for(int i = 0; i<=100; i++){
cout << y[0][i] << endl;
}
delete[] y;
return 0;
}
输出也让我困惑:
0
0
0
1.63042e-332
0
0
0
6.520933e-319
和持续的零。这是什么意思?
当您使用new[]
分配内存时,它不会以任何特定的方式初始化内存。它的内容不确定,访问它,即使是为了阅读,也会导致未定义行为。
您也超出了分配内存的范围,这也会导致未定义行为。c++没有内置的边界检查。
然后你不会释放你分配的所有内存。对于每个new
,应该有一个匹配的delete
,对于每个new[]
,应该有一个匹配的delete[]
。
最后一些注意事项:首先,如果你认为你需要一个动态数组,那么你的下一个想法应该是std::vector
。
new
或new[]
时未初始化的内存,这当然取决于您分配的。如果用构造函数分配对象(或对象数组),当然会导致调用构造函数。构造函数可以初始化对象,也可以不。
相关文章:
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 尝试递归获取数组元素的总和
- 访问无限数组元素