关于c指针数组返回值,谢谢赐教

kawayi_kai 2009-06-12 01:53:36
1.当返回一个结构的指针数组时,以xx**形式的返回值返回,并以xx**的变量接受,为什么在使用时会出错?第一次打印xx[0]->x可以正确打印而第二次xx[1]->x,就不能显示其值了
2.我用一个结构指针指向5*sizeof(结构)的内存,通过指针的地址偏移找到其值,但是在free(指针)的时候总是报错,为什么?
...全文
40 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kawayi_kai 2009-06-12
  • 打赏
  • 举报
回复
谢谢您
wanyuzhen 2009-06-12
  • 打赏
  • 举报
回复
第一问,data *datas[5]是栈区的,在函数返回时销毁
/*读数据*/
data ** readdatas();
data** searchdatas(data**);
void sortdatas(data**);
void writedatas(data**);

int main(int argc, char *argv[])
{
int i;
data **datas;
datas = readdatas();
for(i=0;i <5;i++)
{
printf("%d,%d,%d\n",datas[i]->x,datas[i]->y,datas[i]->z);
}
for(i=0;i <5;i++)
{
free(datas[i]);
}
free(datas);

return 0;
}

data ** readdatas()
{
int i;
data **datas = (data**)malloc(sizeof(data*) *5);
for(i=0;i <5;i++)
{
datas[i]=(data*)malloc(sizeof(data));
datas[i]->x=abs(rand())%900+100;
datas[i]->y=abs(rand())%900+100;
datas[i]->z=abs(rand())%900+100;
}
return datas;
}
kawayi_kai 2009-06-12
  • 打赏
  • 举报
回复
附加上代码:
第一问:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define COUNT 5;


typedef struct
{
int x,y,z;
}data;

/*读数据*/
data** readdatas();
data** searchdatas(data**);
void sortdatas(data**);
void writedatas(data**);

int main(int argc, char *argv[])
{
int i;
data **datas;
datas=readdatas();
for(i=0;i<5;i++)
{
printf("%d,%d,%d\n",datas[i]->x,datas[i]->y,datas[i]->z);
}
for(i=0;i<5;i++)
{
free(datas[i]);
}
return 0;
}

data** readdatas()
{
int i;
data *datas[5];
for(i=0;i<5;i++)
{
datas[i]=(data*)malloc(sizeof(data));
datas[i]->x=abs(rand())%900+100;
datas[i]->y=abs(rand())%900+100;
datas[i]->z=abs(rand())%900+100;
}
return datas;
}
第二问:
#include <stdio.h>
#include <malloc.h>

#define MAX 10

typedef struct
{
int id;
char *name;
int score;
} stu;

stu* readDatas();
stu* searchLowest(stu*);
void outdata(stu* data);

int main(int argc, char *argv[])
{

int num;
stu *datas;
datas=readDatas();
for(num=0;num<MAX;num++)
{
printf("%s\n",(datas+num)->name);
}
//outdata(searchLowest(datas));
for(num=0;num<MAX;num++)
{
free((datas+num)->name);
(datas+num)->name=NULL;
}
free(datas);
return 0;
}

stu* readDatas()
{
stu *datas;
FILE *file;
int index;
datas=(stu*)malloc(MAX*sizeof(datas));
if((file=fopen("d:\\in.txt","rt"))!=NULL)
{
for(index=0;index<MAX;index++)
{
(datas+index)->name=(char*)malloc(4*sizeof(char));
fscanf(file,"%d %s %d\n",&(datas+index)->id,(datas+index)->name,&(datas+index)->score);
}
}
fclose(file);
return datas;
}

stu* searchLowest(stu* datas)
{
int min=datas->score;
int index=0;
int num;
for(num=1;num<MAX;num++)
{
int score=(datas+num)->score;
if(score<min)
{
min=score;
index=num;
}
}
return (datas+index);
}

void outdata(stu* data)
{
FILE *file;
if((file=fopen("d:\\out.txt","wt"))!=NULL)
{
fprintf(file,"%d %s %d\n",data->id,data->name,data->score);
}
fclose(file);
}

69,382

社区成员

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

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