结构体数组指针,段错误!

leinchu 2010-01-23 04:25:49

typedef struct{
int key;
int value;
} iihash;

int iihashs=sizeof(iihash);
iihash *fd2user[10][10];
int f2ul=0;


void addIIHash(iihash *data,int key,int value, int *l)
{
int i=0;
while(i<*l){
if((*(data+i)).key==-1&&(*(data+i)).value==-1) break;
i++;
}
if(i==*l){
(*l)++;
data=(iihash *)realloc(data,iihashs*(*l));
//(*(data+i)).key=malloc(sizeof(int));
//(*(data+i)).value=malloc(sizeof(int));
}
(*(data+i)).key=key;
(*(data+i)).value=value;
}

main()
{
addIIHash(fd2user[0][0],5,0,&f2ul);
addIIHash(fd2user[0][0],6,1,&f2ul);
addIIHash(fd2user[0][0],7,2,&f2ul);
addIIHash(fd2user[0][0],8,3,&f2ul);
}



不要建议我使用链表,

之所以用结构体数组指针,是因为这个结构体数组指针被用作索引,另外一个庞大的数据的一个成员的存放位置,会根据他的特征算出两个个位数x,y;这样直接到fd2user[x][y]里面去找出它的位置.

请帮我纠正上面的代码,

非常感谢!!!
...全文
349 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
leinchu 2010-01-24
  • 打赏
  • 举报
回复
自己找到解决办法了


strcpy(((*(us+i)).ip),(a.ip));
strcpy(((*(us+i)).sn),(a.sn));


指针就是地址,赋值的时候指向同一个地址了
  • 打赏
  • 举报
回复
看晕了,,,楼主的指针用得有点夸张了。。。
mostmark 2010-01-24
  • 打赏
  • 举报
回复
int add(u a)
{
int i=0;
while(i<l) i++; //单看这句怎么看怎么是废话哦,直接写 int i = l;不得了吗
这循环写的有问题
if(i==l) //有了上面那句。i可能不等于l吗?这判断没用哦
{
l++;
us=(u *)realloc(us,l*sizeof(u));
(*(us+i)).ip=malloc(36);
(*(us+i)).sn=malloc(36);
}
*(us+i)=a;
printf("i=%d\n");
}
z569362161 2010-01-24
  • 打赏
  • 举报
回复
什么问题?

你要得到什么?
leinchu 2010-01-24
  • 打赏
  • 举报
回复
上面打印出来的值全是一样的,是怎么回事情啊,该怎么改?
leinchu 2010-01-24
  • 打赏
  • 举报
回复
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

谢谢大家前面的回答,问题已经解决,本该揭贴的,可是由于几百分都花光了,所以想再继续问最后一个问题:

#include <stdio.h>
typedef struct {
char *ip;
char *sn;
}u;
u *us,au;int l=0;
int add(u a)
{
int i=0;
while(i<l) i++;
if(i==l)
{
l++;
us=(u *)realloc(us,l*sizeof(u));
(*(us+i)).ip=malloc(36);
(*(us+i)).sn=malloc(36);
}
*(us+i)=a;
printf("i=%d\n");
}

main()
{
//au=malloc(sizeof(u));
au.ip=malloc(36);
au.sn=malloc(36);
int i;
for(i=0;i<2;i++){
printf("enter ip:\n");scanf("%s",&*(au.ip));printf("->%s\n",au.ip);
printf("enter sn:\n");scanf("%s",&(*au.sn));printf("->%s\n",au.sn);
add(au);
}
printf("l=%s\n");
for(i=0;i<l;i++)
{
printf("%d = %s-%s\n",i,(*(us+i)).ip,(*(us+i)).sn);
}
}




☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
cattycat 2010-01-23
  • 打赏
  • 举报
回复
错了,应该是二维的初始化
fd2user[i][j]=(iihash*)malloc(sizeof(iihash*));
pengzhixi 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cattycat 的回复:]
C/C++ codeiihash*fd2user[10][10];//还得初始化for(int i=0;i<10;i++)
fd2user[i]=(iihash*)malloc(sizeof(iihash*));
[/Quote]
你弄错了。它是个2唯数组,数组里面的元素全是指针。你这弄错了
cattycat 2010-01-23
  • 打赏
  • 举报
回复
iihash *fd2user[10][10];
//还得初始化
for(int i=0;i<10;i++)
fd2user[i]=(iihash*)malloc(sizeof(iihash*));
东大坡居士 2010-01-23
  • 打赏
  • 举报
回复
嗯嗯~
iihash *fd2user[10][10];//定義的時候初始化一下
swl82560397pq 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
大哥你数组里面存放的是指针,你指针都没初始化的你就使用能不错吗
[/Quote]
确实噢,很危险!
swl82560397pq 2010-01-23
  • 打赏
  • 举报
回复
(*l)++;
data=(iihash *)realloc(data,iihashs*(*l));
//(*(data+i)).key=malloc(sizeof(int));
//(*(data+i)).value=malloc(sizeof(int));
realloc malloc分配了要释放啊,
//(*(data+i)).key=malloc(sizeof(int));
//(*(data+i)).value=malloc(sizeof(int));
这2个也需要分配啊
另外addIIHash(fd2user[0][0],5,0,&f2ul);
是否合理未知,但至少觉得没必要,2维指针不就行?





pengzhixi 2010-01-23
  • 打赏
  • 举报
回复
就好比 int *p; *p=5;//你就相当于这样用指针了。
pengzhixi 2010-01-23
  • 打赏
  • 举报
回复
大哥你数组里面存放的是指针,你指针都没初始化的你就使用能不错吗
leinchu 2010-01-23
  • 打赏
  • 举报
回复
if((*(data+i)).key==-1&&(*(data+i)).value==-1) break;

意思是这个数据已经被 "删除",不想链表那样去删除
versaariel 2010-01-23
  • 打赏
  • 举报
回复
学习

70,037

社区成员

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

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