当前位置:首页 > 内存 > 正文

malloc二维数组没分配上内存

  • 内存
  • 2024-08-15 09:03:31
  • 5334

一、C++语言malloc创建二维数组问题第一的,可以
int*ptr=(int*)malloc(5*sizeof(int));//动态分配5个整型内存位置,与inta[5]类似;但前者分配在堆上;后者分配在栈上
p=(int**)malloc(sizeof(int*)*5);//表示设置一个5个int类型指针数组的浮点指针;然后将指针存入其中
p[i]实际上是一个指针
p[i]=(int*)malloc(sizeof(int)*5);//分配指针到指针。
二、c语言:怎样用malloc函数动态分配二维数组,使之可输入数组的行数和每行的列数。有可能,但是正如其他网友所说,记忆是线性的。当你在语言中分配多维数组时,编译器实际上分配的是线性内存,但我们可以通过模拟实现类似数组的操作,如下例所示。数组分配和管理(列数必须固定,前提是列数为4):
int_tmain(intargc,_TCHAR*argv[])
{
int(*p)[4]=(int(*)[4])0;
introw=3;
int(*mem)[4]=(int(*)[4])0;//定义第一个数组指针
mem=(int(*)[4])malloc(sizeof(int(*)[4])*row);//选择行row,4列数组
//为二维数组第一维的每个元素赋值。
meme[0][0]=1;
meme[0][1]=2;
meme[0][2]=3;
meme[0][3]=4;
//打印二维数组每个元素的值
printf("%d,%d,%d,%d",mem[0][0],mem[0][1],mem[0][2],mem[0][3]);
free(mem);
return0;
}
但是这里您需要指定列数。该方法可以保证用户输入任意行或列,而无需提交列数。
intgetElement(int*arr,intcolNum,introw,intcol);
voidsetElement(int*arr,intcolNum,introw,intcol,intval);
int_tmain(intargc,_TCHAR*argv[])
{
int*arr=(int*)0;
introw=3;
intcol=5;
//选择行row列的整型数组col
arr=(int*)malloc(sizeof(int)*col*row);
//设置最后一个元素的值为100
setElement(arr,col,2,4,100);
//输出最后一个元素的值
printf("%d",getElement(arr,col,2,4));
free(arr);
return0;

//各参数的说明为如下:
//arr:数组首地址
//colNum:数组列数
//row:接收元素的行
//col:接收到的元素的列
intgetElement(int*arr,intcolNum,introw,intcol)
{
return*(arr+sizeof(int)*(row-1)*colNum+col);
}
//该函数用于设置指定行列中的值元素:盛桂枝
//arr:数组首地址
//colNum:数组的列数
//row:结果元素的行
//col:接收到的元素的列
//val:要设置的值
voidsetElement(int*arr,intcolNum,introw,intcol,intval)
{
*(arr+sizeof(int)*(row-1)*colNum+col)=val;
}
最终,这仍然适用于指针。希望这对你有帮助哈哈。
三、C语言中二维数组如何申请动态分配内存

1.使用malloc函数先分配第一个维度的大小,然后循环分配每个维度的大小。

2.分配3行4列二维数组的例程:

#include
#include
intmain()
{
int**a;
inti,j;
a=(int**)malloc(sizeof(int*)*3);//为二维数组分配3行
for(i=0;i<3;++i){//为每列分配4个大小范围
a[i]=(int*)malloc(sizeof(int)*4);
}
//初始化
for(i=0;i<3;++i){
                                                                       /输出测试
for(i=0;i<3;++i){
for(j=0;j<4;++j){
printf("%d",a[i][j]);
                                                                                                                                                 i=0;我<3;++i){
free(a[i]);
}
free(a);
return0;
}
/*
输出:
0123
1234
2345
*/