C语言 关于为指针的指针分配内存的问题

int**val=NULL;我想为这个指针的指针分配内存;这样是不是对的?array=(int**)malloc(sizeof(int)*10*10+1);下面这段代码在... int **val = NULL;
我想为这个指针的指针分配内存;

这样是不是对的?
array = ( int ** ) malloc( sizeof( int ) * 10 * 10 + 1 );

下面这段代码在16位的编译器上可以通过,但是在32位的VC6上就出错;
为什么?

for( n = 0 ; n < 10 ; n++ ) {
for( j = 0 ; j < 10 ; j++ ) {
*( *( array + j ) + n ) = j;
}
}

for( n = 0 ; n < 10 ; n++ ) {
for( j = 0 ; j < 10 ; j++ ) {
printf(" %d " , *( *( array + j ) + n ) );
}
printf("\n\n");
}
展开
 我来答
micheal_qd
2010-01-09 · 超过12用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:34.6万
展开全部
array 是 int * * 型的吗?我在VC6.0测试,分配内存是正确的,但要明白,分配的内存都被认为是int*型的,也就是101个int*型的空间。
*(array+j)得到这101个空间中的某个,是int*型,*(*(array+j)+n)是这101个指针中的某一个指向的内存空间,而这个内存空间没有分配,所以程序运行时会出错。至于在16位机器上通过,只是侥幸而已,因为16位机器没有内存保护,所有的空间都能访问,如果访问了操作系统的空间,可能不会立即崩溃,但系统有可能出问题的。而32位机器有保护模式,访问非法空间系统会报错。
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
coolasiam
推荐于2017-11-22 · TA获得超过106个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:99.6万
展开全部
首先:int** 是一个二级指针,它是指针的指针,如果你要申请一个二维数组,有下面两个方法:
int** val = (int**)malloc(sizeof(int*) * 10);
int i;
for(i = 0; i < 10)
val[i] = (int*)malloc(sizeof(int) * 10);
然后你可以这样引用:*(*(val+m)+n) = value;

第二种:int* val = (int*)malloc(sizeof(int) * 10 * 10);
然后这样引用:*(m*10 + n) = value;
这其实就是个一维数组,不过你把它看成二维的处理。。

希望对你有帮助哦
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renjianke
2010-01-09 · TA获得超过2932个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:658万
展开全部
使用sizeof,就和机器位数无关~
二级指针动态分配方式如下:

int **a;
a=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2015-10-30 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:884万
展开全部

1、void* malloc(size_t  size)。这个函数请求分配大小为size字节的内存,并返回指向该块内存起始位置的指针。

2、例程:

#include <stdio.h> 
#include <stdlib.h>
void main() 

 int i,j; 
 int row,col; 
 int** matrix; 
 printf("input the row and col:\n");
 scanf("%d%d",&row,&col);  //输入矩阵的行和列
 //动态分配内存 
 // 为动态数组分配了二维的空间 
 matrix=(int **)malloc(sizeof(int *)*row); 
 for(i=0;i<row;i++) 
 { 
  matrix[i]=(int*)malloc(sizeof(int)*col); 
 } 
 //输入
 printf("please input the array elements:\n") ;
 for(i=0;i<row;i++) 
 { 
  for(j=0;j<col;j++) 
  { 
   scanf("%d",&matrix[i][j]); 
  } 
 }
 //输出 
 for(i=0;i<row;i++) 
 {
  printf("\n");
  for(j=0;j<col;j++) 
  { 
   printf("%d  ",matrix[i][j]); 
  } 
 } 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-01-09
展开全部
//给你一段代码看看,呵呵。

int i=0,j=0,x=10,y=10;
int **array=NULL;

//注意,是这样申请空间的,一次性完成
array=(int**)malloc(sizeof(int)*x*y + y*sizeof(int*));
array[0]=(int*)((char*)array + y*sizeof(int*));
for(i=1;i<y;i++)array[i]=array[i-1]+x;

for( i = 0 ; i < y; i++ )
{
for( j = 0 ; j < x; j++ )
{
array[i][j] = j;
}
}

for( i = 0 ; i < y; i++ )
{
for( j = 0 ; j < x; j++ )
{
printf(" %d " , array[i][j]);
}
}

free(array);//注意,是这样释放空间的,一次性完成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式