打印

VC++ c语言 二维数组动态分配内存问题

[复制链接]
1316|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 蔚蓝柳叶 于 2014-9-21 10:52 编辑

#include <stdio.h>
#include <stdlib.h>
void main()
{
int n,i,j,flag;
int a[100][100]={0};
int **b;
int num=0;
printf("\nplease enter a number:  ");

while(1)
{
         flag=scanf("%d",&n);
         fflush(stdin);           //清空输入缓存
         if(flag!=1||n==0)  printf("\n输入有误,请输入大于0数字:  ");
         else break;
}

  //对b数组进行动态分配内存。
   b = (int **)malloc(sizeof(int *)*3*n);//分配指针数组
   for(i=0; i<n; i++)
   {  
           b[ i ] = (int *)malloc(sizeof(int)*3*n);//分配每个指针所指向的数组
   }
   if(*b==NULL)
   {
        printf("memory fail");
            exit(-1);
   }                       

//构造三角阵数形
  for(i=n-1;i<2*n-1;i++)                            //问题好像就在这个for循环            
{
  for(j=0;j<2*n-1-i;j++)
  {
   num++;
   b[ i ]
[j]=num;
  }
}

for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
           printf("%5d",b [ i ]
[j]);     
    printf("\n");
}
}   
编译连接都没有问题,运行的时候就出错,说内存不能为written。       
求各位c大神解释下,程序哪里出错了,该怎么改。



相关帖子

沙发
nethopper| | 2014-9-21 09:51 | 只看该作者
b = (int *)malloc(sizeof(int)*3*n);//分配每个指针所指向的数组
应为
b[i] = (int *)malloc(sizeof(int)*3*n);//分配每个指针所指向的数组

使用特权

评论回复
板凳
蔚蓝柳叶|  楼主 | 2014-9-21 10:52 | 只看该作者
nethopper 发表于 2014-9-21 09:51
b = (int *)malloc(sizeof(int)*3*n);//分配每个指针所指向的数组
应为
b = (int *)malloc(sizeof(int)* ...

b[ i ]我打漏了。

使用特权

评论回复
地板
蔚蓝柳叶|  楼主 | 2014-9-21 10:53 | 只看该作者
nethopper 发表于 2014-9-21 09:51
b = (int *)malloc(sizeof(int)*3*n);//分配每个指针所指向的数组
应为
b = (int *)malloc(sizeof(int)* ...

改回来,也是出现同样的问题。

使用特权

评论回复
5
nethopper| | 2014-9-22 01:24 | 只看该作者
*b==null  是啥意思,没敲错吧?

使用特权

评论回复
6
蔚蓝柳叶|  楼主 | 2014-9-22 10:53 | 只看该作者
nethopper 发表于 2014-9-22 01:24
*b==null  是啥意思,没敲错吧?

if(*b==NULL)
   {
        printf("memory fail");
            exit(-1);
   }      
这段删了,问题还存在!!!

使用特权

评论回复
7
nethopper| | 2014-9-22 15:25 | 只看该作者
蔚蓝柳叶 发表于 2014-9-22 10:53
if(*b==NULL)
   {
        printf("memory fail");

b = (int **)malloc(sizeof(int *)*3*n);//分配指针数组
for(i=0; i<n; i++)

改为

b = (int **)malloc(sizeof(int *)*3*n);//分配指针数组
for(i=0; i<3*n; i++)

使用特权

评论回复
8
蔚蓝柳叶|  楼主 | 2014-9-22 21:47 | 只看该作者
nethopper 发表于 2014-9-22 15:25
b = (int **)malloc(sizeof(int *)*3*n);//分配指针数组
for(i=0; i

按你这样改,好了,万分感谢!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:柳桥静观峰岳时,杏香轻抚白云笑。

10

主题

81

帖子

1

粉丝