数组指针释放内存问题,求大佬帮助

weixin_42314504 2018-05-26 11:27:45
求大佬解答以下问题

int _tmain(int argc, _TCHAR* argv[])
{

int (*b)[3];//定义数组指针,相当于定义一个二维数组,行数不确定但列数是三
b=(int (*)[3])malloc(sizeof(int *)*3);//为数组指针申请三行内存,相当于b[3][3]
for(int i=0;i<2;++i)
b[i][0]=234;//数组指针可以当做二维数组用,目前i<2不越界,但i<3好像就越界了,为什么?
for(int i=0;i<2;++i)
printf("%d\n",b[i][0]);
free(b);//释放内存出现了问题,求解答
return 0;
}

如果以上我标注的有什么不对也请大佬指出
...全文
1115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
crospo 2018-06-14
  • 打赏
  • 举报
回复
int (*b)[3];//定义数组指针,相当于定义一个二维数组,行数不确定但列数是三 我理解是定义了数组指针 也就是数组中一共有三个元素 但是每一个元素都是指针 b=(int (*)[3])malloc(sizeof(int *)*3);//为数组指针申请三行内存,相当于b[3][3] 我理解 是每一个元素大小 以上就是一个一维数组。
wxf54318 2018-05-28
  • 打赏
  • 举报
回复
b=(int (*)[3])malloc(sizeof(int *)*3);//为数组指针申请三行内存,相当于b[3][3] b=(int (*)[3])malloc(sizeof(int )*3 *3);
自信男孩 2018-05-28
  • 打赏
  • 举报
回复
int (*b)[3];//定义数组指针,相当于定义一个二维数组,行数不确定但列数是三
这句的注释是对的。没问题。
b=(int (*)[3])malloc(sizeof(int *)*3);//为数组指针申请三行内存,相当于b[3][3]
这句的注释就有问题,不是申请了3行3列的空间。sizeof(int *)长度是sizeof(int)一样的。这儿只是申请了3 * sizeof(int)的空间。
b=(int (*)[3])malloc(sizeof(int)*3 * 3);/
这才是申请了了3行3列的空间;
lizh1009 2018-05-28
  • 打赏
  • 举报
回复
int (*b)[3];//定义数组指针,相当于定义一个二维数组,行数不确定但列数是三
我觉得这句有问题,这是定义了一个指向一维数组的指针,不是定义二维数组,定义二维数组这个词一定是要确定二维数组的行号列号。
赵4老师 2018-05-28
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组
幻夢之葉 2018-05-26
  • 打赏
  • 举报
回复
分配的大小有问题 b是一个指向一个3大小的数组,你需要三个这样子的内存,那就是3*3*sizeof(int)的大小(32系统36字节,你实际分配的是12字节)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧