指针和内存的问题

ksyou 2003-04-04 10:22:32
在头文件中定义了结构,


strcut _ip{

.......

}iphdr;

strcut _msg{
iphdr *myiphdr;
.....
.....
}msg;

然后使用了该结构的指针:

msg *hmsg;

我在程序中使用 hmsg->myiphdr->(iphdr结构元素)

当程序运行一段时间后,就会出现myiphdr里面的元素不能读出的错误!

请问:如何解决?定给高分!
...全文
32 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen_zhaozhencn 2003-04-04
  • 打赏
  • 举报
回复
仔细检查以下几个方面:
1、内存空间已经分配

2、内存用完之后释放 , 并及时将指针值改为NULL, 杜绝野指针。

3、及时回收空间。
allen_zhaozhencn 2003-04-04
  • 打赏
  • 举报
回复
你把你的代码贴上来。
maurice1983 2003-04-04
  • 打赏
  • 举报
回复
hmsg.myiphdr->(iphdr结构元素)
liem 2003-04-04
  • 打赏
  • 举报
回复
检查一下_ip里是否还有指针。通常对每一个指针都要有确定的指向,暂时不用可以指向NULL
否则根据lulu的,可以编译,执行
ksyou 2003-04-04
  • 打赏
  • 举报
回复
我的代码太多了,不好贴啊
prettynacl 2003-04-04
  • 打赏
  • 举报
回复
一样的问题?
明明可以编译,执行。
要不你把你的代码贴上来。
ksyou 2003-04-04
  • 打赏
  • 举报
回复
还是一样的问题
prettynacl 2003-04-04
  • 打赏
  • 举报
回复
分配了也没有用,还是一样的错误?
是怎么样分配的?
是这样吗:
先要加上:typedef:

typedef strcut _ip{

.......

}iphdr;

typedef strcut _msg{
iphdr *myiphdr;
.....
.....
}msg;

msg *hmsg;
 hmsg = (msg *) malloc(sizeof( msg));
hmsg->myiphdr = (iphdr *) malloc(sizeof(iphdr ));
然后再使用应该没问题了。

zanglan 2003-04-04
  • 打赏
  • 举报
回复
为hmsg分配内存后,myiphdr还要再分配内存,除非你吧msg定义改成
strcut _msg{
iphdr myiphdr;
.....
.....
}msg;
tinytot 2003-04-04
  • 打赏
  • 举报
回复
iphdr *myiphdr;是hmsg的一个元素,我给hmsg分配了内存,应该不需要再为myiphdr分配内存了吧?
------------------------------------------
myiphdr只是一个指针变量, 如果它没有指向一个分配的内存块, 那你是不能访问它的内容的.
woxihuanbohe 2003-04-04
  • 打赏
  • 举报
回复
strcut _ip{//拼写有误 下同 struct

.......

}iphdr;

strcut _msg{//这里好象要用typedef吧?如果你讨厌写_msg;
iphdr *myiphdr;//iphdr是个变量,不是自定义类型!下msg同
.....
.....
}msg;

然后使用了该结构的指针:

msg *hmsg;//msg不是类型,是个变量,可以用一个变量声明另外一个变量?

我在程序中使用 hmsg->myiphdr->(iphdr结构元素)

当程序运行一段时间后,就会出现myiphdr里面的元素不能读出的错误!
luohualiushui 2003-04-04
  • 打赏
  • 举报
回复
没有道理啊
可能是错误出在其他地方了
Jinglihui 2003-04-04
  • 打赏
  • 举报
回复
代码都没有,谁知道你怎么用的啊?贴出相关代码
ksyou 2003-04-04
  • 打赏
  • 举报
回复
分配了也没有用,还是一样的错误

这个错误困扰我好多天了,一直的不到解决,还请高人多多指导
Jinhao 2003-04-04
  • 打赏
  • 举报
回复
iphdr *myiphdr;没有对象,没有分配空间
ksyou 2003-04-04
  • 打赏
  • 举报
回复
iphdr *myiphdr;是hmsg的一个元素,我给hmsg分配了内存,应该不需要再为myiphdr分配内存了吧?
prettynacl 2003-04-04
  • 打赏
  • 举报
回复
输出hmsg->myiphdr的值。看看与当初分配时是一致的吗?
liushmh 2003-04-04
  • 打赏
  • 举报
回复
iphdr *myiphdr;
没有分配内存
ksyou 2003-04-04
  • 打赏
  • 举报
回复
我在程序中用malloc为hmsg分配了内存并初始化了
Bandry 2003-04-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

typedef struct _ip {
int i1;
int i2;
int i3;
int i4;
}iphdr;

typedef struct _msg{
iphdr* myiphdr;
char* szmsg;
}msg;

void main()
{
msg* pmsg;

pmsg = (msg *)malloc(sizeof(msg));

pmsg->myiphdr = (iphdr *)malloc(sizeof(iphdr));
pmsg->myiphdr->i1 = 255;
pmsg->myiphdr->i2 = 255;
pmsg->myiphdr->i3 = 255;
pmsg->myiphdr->i4 = 0;

pmsg->szmsg = (char *)malloc(100 * sizeof(char));
pmsg->szmsg = "ip message description";

printf("\nIP: %d.%d.%d.%d\n", pmsg->myiphdr->i1,
pmsg->myiphdr->i2, pmsg->myiphdr->i3, pmsg->myiphdr->i4);
printf("\nIP Description: %s\n\n", pmsg->szmsg);
}

肯定不会有问题。
估计是你其他的地方错误
加载更多回复(2)

69,374

社区成员

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

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