有关结构体类型中的内存分配问题

gagasunny 2006-12-03 09:17:27
各位大虾,小弟刚刚在tc环境下做一个关于结构体和指针的练习。
我定义了一个结构体
typedef struct {
int data;
struct node* next;
}node ;

然后在main()函数中的程序如下
void main()
{ node *head ;
node* second;
node* third;
node* p;
head->data=1;
second->data=2;
third->data=3;
head->next=second;
second->next=third;
third->next=NULL;
p=head;
/* printf("%d\n",p->data);
printf("%d\n",head);
printf("%d\n",second);
printf("%d\n",third);*/
while(p!=NULL)
{printf("%d\n",p->data);
p=p->next;
}
}
我就是想给定义的三个结构指针变量赋值,然后用NEXT指针把它们串起来,最后打印出来,可是我显示的结果只有1,其他的两个变量中的data数据没有打印,我本以为在给 node *head ;node* second;node* third;三个变量赋值后会自动分配内存地址,可是我把/* ---*/中的程序加入到原程序中发现second的地址为零,难道自动分配的地址里会有0吗?我又尝试自己给三个结构指针变量赋上地址值,赋值后得到自己想要的结果,可是我看到的书上面写的程序里都不时手工赋地址的,也没有考虑自动分配的地址里会有O的情况,所以我想问问,是不是不同的编译器对地址的处理会不相同(比如会把0作为有效地址分配给变量),对于地址和指针可能我还不是很熟悉,哪位大虾给我详细说一下也好。


...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gagasunny 2006-12-18
  • 打赏
  • 举报
回复
谢谢,指针的问题还在学习中。
wood542344 2006-12-04
  • 打赏
  • 举报
回复
不是new不new的问题。是有没有分配内存。不能用new你不会用其它的分配内存吗?
malloc等方法?
或是直接定义对象,不用指针也可以,直接初始化就可以了。
「已注销」 2006-12-04
  • 打赏
  • 举报
回复
upgrade to VC or bcb````all ok```
阿发伯 2006-12-04
  • 打赏
  • 举报
回复
楼上注意楼主是TC环境,不能用new的
wood542344 2006-12-04
  • 打赏
  • 举报
回复
这个个错误有点大了哦,node *head ;node* second;node* third;只是分配了三个指那Node类型的指针,却并没有为head->Data,head->next分配空间,换句话说,你只定义了指针,没有给指针指向的结构体分配内存。所以会出错。
应该这样写Node * head = NULL;
head = new Node;
node * second = NULL;
second = new Node;
head->data = 1;
head->next = secend;
这样应该就可以了
阿发伯 2006-12-03
  • 打赏
  • 举报
回复
我看到的书上面写的程序里都不时手工赋地址的,也没有考虑自动分配的地址里会有O的情况,所以我想问问,是不是不同的编译器对地址的处理会不相同
================================================================================
不知道你在那本经典看的,局部变量空间是自动分配的,在你的程序中,指针变量都是自动分配的,但是仅仅是指针本身的地址空间,而指针所指向的数据结构必须手工分配或者指向任何有效的地址空间,否则是无效指针.无效指针所指向的地址是不定的,对无效指针指向的空间赋值是很危险的操作.


#include <stdio.h>
#include <malloc.h>

typedef struct _node{
int data;
struct _node* next;
}node;

void main()
{
int i;
node *head;
node* p, *t;
head = malloc(sizeof(node));
for(i = 1, p = head; i < 4; i ++, p = p->next)
{
p->data = i;
if(i == 3)
p->next = NULL;
else
p->next = malloc(sizeof(node));
}
p = head;
while(p != NULL)
{
printf("%d\n", p->data);
t = p;
p = p->next;
free(t);
}
}
阿发伯 2006-12-03
  • 打赏
  • 举报
回复
node *head ;
node* second;
node* third;
没有分配内存

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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