当将return从new int[10][3]转换为int**指针时,使用它的程序输出:
When casting return from new int[10][3] to int** pointer, the program using it outputs : Segmentation fault: 11?
为什么这个程序输出:段错误:11
#include <iostream>
using namespace std;
int main(){
int **a = (int**)new int[10][3];
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
cout << a[0][0] << "," << a[0][1] << "," << a[0][2];
return 0;
}
修改此声明
int **a = (int**)new int[10][3];
int ( *a )[3] = new int[10][3];
否则,操作符new返回的指针int **
和int ( *a )[3]
不兼容。
问题是,在表达式a[0]
时,a
具有类型int **
,编译器试图读取分配的未初始化内存作为类型int *
的指针的有效值。
还应该删除程序末尾的指针
delete [] a;
另一种方法是如下
int **a = new int * [10];
for ( size_t i = 0; i < 10; i++ ) a[i] = new int[3];
在这种情况下,分配的内存按以下方式释放
for ( size_t i = 0; i < 10; i++ ) delete [] a[i];
delete [] a;
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- std::cout输出int时出现编译错误
- C++ 中文件输入输出中的长长 v/s int
- 我从int x[3]得到的一个非常奇怪的输出;
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- 有没有一种简单的方法可以将矢量 int 集转换为字符串输出?
- 基本 int 数组提供意外输出
- 为什么printf和cout为此无符号int提供了不同的输出
- Int 输出与给定值不对应
- 为什么没有"int"类型声明时输出不同?
- 当用户输入int变量的字符串时,输出
- 如何使用字符获取多个输入,使用 int 获取多个输出?C++
- unsigned int/signed int/long-long:无法解释的输出
- 矢量<int>的赋值和输出向量
- 程序的输出,在 C++ 中,&int 到 char* 转换
- 将 64 位 int 作为输出传递到 32 位内联 asm
- 在代码块中使用双精度给了我 int 输出
- Void与Int输出参数签名
- C++如何将int输出为32位二进制