CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

这是为什么?

楼主Trainsp0tting(该用户的昵称因太长已被系统屏蔽!希望大家引以戒!太长是不允许的!像这个名字就太长了,你看,都这么长了)2005-06-03 20:28:34 在 C/C++ / 新手乐园 提问

#include<stdio.h>  
   
  int**   temp;  
   
  int   main(){  
          int   i,   j;  
          temp   =   (int**)malloc(5   *   6   *   sizeof(int));  
          for(i   =   0;   i   <   5;   ++i)  
                  for(j   =   0;   j   <   6;   ++j)  
                          temp[i][j]   =   i*j;  
          system("pause");  
  }  
   
  编译通过,可调试的时候为什么告诉我访问违例呢?  
  temp[i][j]   与   **(temp   +   i   *   6   +   j)不是等价的吗?  
  望高手指教,这个问题一下午了我也没搞明白,偶指针学的太糊涂 问题点数:20、回复次数:6Top

1 楼Trainsp0tting(该用户的昵称因太长已被系统屏蔽!希望大家引以戒!太长是不允许的!像这个名字就太长了,你看,都这么长了)回复于 2005-06-03 20:29:30 得分 0

晕啊,刚才把   temp[i][j]   换成   **(temp   +   i   *   6   +   j)也不行,也一样是访问违例Top

2 楼lbing7(向青润老大学习!!!)回复于 2005-06-03 20:38:42 得分 7

动态分配二维数组啊/?  
   
  给你一点从网上搜的资料吧!  
   
  1.  
          A   (*ga)[n]   =   new   A[m][n];  
          ...  
          delete   []ga;  
  缺点:n必须是已知  
  优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)  
   
  2.     A**   ga   =   new   A*[m];  
          for(int   i   =   0;   i   <   m;   i++)  
                  ga[i]   =   new   A[n];  
          ...  
          for(int   i   =   0;   i   <   m;   i++)  
                  delete   []ga[i];  
          delete   []ga;  
  缺点:非连续储存,程序烦琐,ga为A**类型  
  优点:调用直观,n可以不是已知  
   
  3.     A*   ga   =   new   A[m*n];  
          ...  
          delete   []ga;  
  缺点:调用不够直观  
  优点:连续储存,n可以不是已知  
   
  4.     vector<vector<A>   >   ga;  
          ga.resize(m);                                               //这三行可用可不用  
          for(int   i   =   1;   i   <   n;   i++)                     //  
                  ga[i].resize(n);                                 //  
          ...  
   
  缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大)  
  优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长  
   
  5.     vector<A>   ga;  
          ga.resize(m*n);  
  方法3,4的结合  
   
   
  6.   2的改进版(Penrose提供,在此感谢)  
          A**   ga   =   new   A*[m];  
          ga[0]   =   new   A[m*n];  
          for(int   i   =   1;   i   <   m;   i++)  
                  ga[i]   =   ga[i-1]+n;  
          ...  
          delete   []   ga[0];  
          delete   []   ga;  
  缺点:程序烦琐,ga为A**类型  
  优点:连续储存,调用直观,n可以不是已知  
  Top

3 楼Trainsp0tting(该用户的昵称因太长已被系统屏蔽!希望大家引以戒!太长是不允许的!像这个名字就太长了,你看,都这么长了)回复于 2005-06-03 21:28:09 得分 0

谢谢楼上的,不过我用的是C啊  
  还有,我主要是想知道为什么会出现访问违例这种情况Top

4 楼foochow(无聊,灌水......)回复于 2005-06-03 21:43:54 得分 7

temp[i][j]   与   **(temp   +   i   *   6   +   j)不是等价的吗?  
  .................................  
  int   temp[m][n]  
  int*p=&temp[0][0];  
  temp[i][j]=*(p+i*n+j);Top

5 楼Trainsp0tting(该用户的昵称因太长已被系统屏蔽!希望大家引以戒!太长是不允许的!像这个名字就太长了,你看,都这么长了)回复于 2005-06-03 22:15:47 得分 0

int   temp[m][n]  
  int*p=&temp[0][0];  
  temp[i][j]=*(p+i*n+j);  
   
  你这个p是int*  
  而我说的temp是int**,解引用的时候用两个*不是正好吗?Top

6 楼sh5dragon5(Zaknafein)回复于 2005-06-04 16:22:39 得分 6

感觉是不是应该是这样啊  
  *(*(temp   +   i   *   6)   +   j)Top

相关问题

  • 这是为什么?
  • 这是为什么?????????
  • 这是为什么????
  • 这是为什么
  • 这是为什么??
  • 这是为什么??
  • 这是为什么
  • 这是为什么
  • 这是为什么?
  • 这是为什么???

关键词

  • ga
  • resize
  • temp

得分解答快速导航

  • 帖主:Trainsp0tting
  • lbing7
  • foochow
  • sh5dragon5

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo