结构体二级指针的内存分配

jiamianshiye 2015-03-21 05:34:52
先贴上代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

struct infomation{
char plate_num[16];
char time_str[32];
};


int main(void)
{
int i = 0;
struct infomation **p2Info = malloc(5 * sizeof(struct infomation *));
if(p2Info == NULL){
printf(" %d cannot malloc mem!\n", __LINE__);
return -1;
}
for(i = 0; i < 5; i++){
*(p2Info + i) = malloc(sizeof(struct infomation *));
if(*(p2Info + i) == NULL){
printf(" %d cannot malloc mem!\n", __LINE__);
return -1;
}
strcpy((*(p2Info + i))->plate_num, "hello world");
strcpy((*(p2Info + i))->time_str, "2015-03-21");
}
printf("%s %s\n", (*(p2Info + i))->plate_num, (*(p2Info + i))->time_str);


return 0;
}


在打印printf("%s %s\n", (*(p2Info + i))->plate_num, (*(p2Info + i))->time_str); 时,可以打印出正确结果。
我这里的问题就是为什么能打印出正确结果?
在循环内分配空间, *(p2Info + i) = malloc(sizeof(struct infomation *));应该有问题吧,我觉得是该改成
*(p2Info + i) = malloc(sizeof(struct infomation )); 才对。
...全文
255 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiamianshiye 2015-03-23
  • 打赏
  • 举报
回复
引用 3 楼 sholber 的回复:
在打印printf("%s %s\n", (*(p2Info + i))->plate_num, (*(p2Info + i))->time_str); 时,可以打印出正确结果。 我这里的问题就是为什么能打印出正确结果?运气在循环内分配空间, *(p2Info + i) = malloc(sizeof(struct infomation *));应该有问题吧,我觉得是该改成 *(p2Info + i) = malloc(sizeof(struct infomation )); 才对。 u r right.
OK了,多谢回复。
均陵鼠侠 2015-03-22
  • 打赏
  • 举报
回复
在打印printf("%s %s\n", (*(p2Info + i))->plate_num, (*(p2Info + i))->time_str); 时,可以打印出正确结果。 我这里的问题就是为什么能打印出正确结果?运气在循环内分配空间, *(p2Info + i) = malloc(sizeof(struct infomation *));应该有问题吧,我觉得是该改成 *(p2Info + i) = malloc(sizeof(struct infomation )); 才对。 u r right.
jiamianshiye 2015-03-22
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
*(p2Info + i) = malloc(sizeof(struct infomation *)); 这个当然有问题,你申请的指针大小的空间不是结构大小的靠近,你后面的内存访问应该越界了
我也认为该越界了,,,但是我打印内存地址后发现虽然给定的是sizeof(struct infomation *), 但是 *(p2Info + i)得访问没有出错。 打印结果也没有任何问题。这个是我非常不理解的地方。
worldy 2015-03-21
  • 打赏
  • 举报
回复
*(p2Info + i) = malloc(sizeof(struct infomation *)); 这个当然有问题,你申请的指针大小的空间不是结构大小的靠近,你后面的内存访问应该越界了

70,023

社区成员

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

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