C++中用new为二级指针分配空间的问题 c++ 用new给二维数组分配空间后,在赋值时显示内存冲突。

作者&投稿:宗政文 (若有异议请与网页底部的电邮联系)
首先一级指针
INT *ptr;
ptr = new INT[10][10]; 这句就是错的,编译不过去,所以也就解决你的疑问了。无论1级还是2级指针都不能中括号相邻分配。
其次
INT **ptr;
ptr = new INT* [10 * 10]; 这句是指分配了100个int指针,并不是一个10*10的2维数组。如果分配一个2维数组必须
int **ptr = new int *[10];
for(int i=0;i<10;i++)
{
ptr[i]=new int[10];
}
希望你看懂了!!

INT *ptr;
ptr = new INT[10][10];
会编译错误。
(错误: 不能将‘int (*)[10]’转换为‘int*’,在 assignment 中)
ptr声明为指向一个INT型的,但是实际指向的却是int(*)[10]型。

INT[10 * 10];我觉得大概和INT[100]没两样

int(*)[2]表示的是数组大小为2的数组的指针,int *是一个int整数的指针,你将这两个赋值当然出错。
你所说的ptr = new INT[10][10]; 这句是不可能编译地去的,因为int[10][10]的类型就int(*)[]。同时要弄清楚一个问题就是,int*[]与int(*)[]是不同的,int* []的意思是分配一段内存,内存里面数据类型是int*,即指针类型;而int(*)[]就是一个指针,一个指向后面综括号里那么大一段内存的指针(其实就是那段内存的第一个元素的地址)
如果你用malloc就会更清晰了,int **ptr=(int **)malloc(a*sizeof(int *));
然后
for(i=0;i<a;i++)
*p=(int *)malloc(b*sizeof(int));
这样的结果就相当一个数组ptr[a][b]了,当然这是动态的。

//---------------------------------------------------------------------------
#include <iostream>

int main(void)
{
int **p;
int i,j;
p=new int*[10];/*注意这里*/
for (i = 0; i < 10; i++) {
p[i]=new int[10];/*注意这里*/
}
for (i = 0; i < 10; i++) {
for (j=0; j<10; ++j) {
p[i][j]=i*j;
std::cout<<p[i][j]<<'\t';
}
std::cout<<std::endl;
delete[] p[i];
}
delete[] p;
return 0;

}
//---------------------------------------------------------------------------

C++ 用New对指针分配空间 连等式怎么理解;~

struct Memblock {int data[1024];Memblock* next, *ptrf;};int main() {Memblock* a, *b;a = b = new Memblock;}a和b都应该声明为指针类型
a = b = new Memblock;这个命令只分配了一个Memblock的空间,并且把地址保存在a和b两个指针变量里面

构造函数里
unsigned int **con = new unsigned int *[200];//去掉开头的unsigned int **
for (int i = 0; i < 200; i++)
con[i] = new unsigned int[40];
这明显是给局部指针变量开辟了空间
con[i][j] = k; 这里的con不可能是构造函数里初始化的con,只能是成员变量con
不过成员变量con现在还是个空指针。

C++中用new为二级指针分配空间的问题
答:首先一级指针 INT *ptr;ptr = new INT[10][10]; 这句就是错的,编译不过去,所以也就解决你的疑问了。无论1级还是2级指针都不能中括号相邻分配。其次 INT **ptr;ptr = new INT* [10 * 10]; 这句是指分配了100个int指针,并不是一个10*10的2维数组。如果分配一个2维数组必须 int ...

c++二级指针如何手动释放?double** PP = new double* [NSEG + 1...
答:不需要双层释放,这样就行。除非你pp的每个元素如pp[0], pp[1]也用了new,那就要双层释放,那也是先释放pp[0], pp[1], 再释放PP if (PP != NULL){ delete[] PP;PP = NULL;}

c语言二级指针初始化为空后赋值问题
答:对指针的理解不够深刻,首先指针也是一个变量。二级指针保存着是一级指针地址的变量,所以int **ppdata = NULL说明了 这个二级指针保存的是一个一级指针的地址,保存的地址是0;由于保护模式的缘故,(可自行查阅资料),ring3无法对保护段的内存进行读写,所以会出现运行时崩溃。而第一个没报错的原...

如何用new在类中分配空间,再赋值
答:class node { node *link;int data;public:node(){ link=new node;//开内存 ...} ...~node(){ delete link;//释放内存 } };

c++怎样用new给void*类型的指针分配内存
答:使用 void *pInfo = (void*)(new char[length]);即可。1.new的作用是从自由存储为 类 的对象或对象数组分配内存,并将已适当分类的非零指针返回到对象。比如:char * pchar= new char[10];delete pchar;例子中动态分配了10个char类型的内存给了pchar,来构成一个数组。需要注意的是,分配数组...

c++中NEW运算符的用法
答:c++中NEW运算符使用的一般格式为new 类型[初值]。用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。1、newint:开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)。2、new...

C语言中new的用法
答:一般使用格式:格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符 [内存单元个数];说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时...

vc++二级指针的问题?着急!!
答:for(int i=0;i<5;i++)p[i]=new int[5]; // 为每个整型指针分配了可以容纳5个整型变量的内存 // 使用完p后 // 我为你添加的内存释放代码 for(int k = 0; k < 5; k++)delete p[i]; // 释放每个整型指针所指向的内存 delete p; //释放p(注意这个p也是占有了5个整型指针...

c++中new是什么意思
答:C++中new运算符用于动态分配和撤销内存的运算符。new运算符使用的一般格式为new 类型 [初值]。用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。一般来说,使用new申请空间时,是从系统的“堆”(...

C++中new的用法
答:C++中new运算符用于动态分配和撤销内存的运算符。1、开辟单变量地址空间 new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(5) 作用同上,但是同时将整数赋值为5。2、开辟数组空间 要访问...