+ -
当前位置:首页 → 问答吧 → 菜鸟求解——〉〉包含结构体指针的结构体的使用问题

菜鸟求解——〉〉包含结构体指针的结构体的使用问题

时间:2011-12-07

来源:互联网

问题如下:
下面是我定义的结构体
typedef struct
{
  float z;
} VERTEX_Z;
typedef struct
{
 int Xf,Yf;
 int Xc,Yc;
 VERTEX_Z * points;
} OBJECT;

OBJECT mydem;
当我调用自定义的函数void objload(char *name,OBJECT *k)初始化mydem时 ,为何明明通过k->points[i].z=height;给points赋了值,在函数外面却不能用;当我调试的时候发现在函数内部已经给k->points[i].z成功赋值,然而函数返回时,
mydem的points中不知为何只显示一个z值???
我写的具体代码如下::
void objallocate(OBJECT *k,int n)
{ VERTEX_Z * a=k->points;
k->points=(VERTEX_Z*)malloc(sizeof(VERTEX_Z)*n); // 分配n个顶点的内存空间
}
void readstr(FILE *f,char *string) // 读取一行字符
{
do
{
fgets(string, 255, f); // 最多读取255个字符
} while ((string[0] == '/') || (string[0] == '\n')); // 遇到回车则停止读取
return; // 返回
}
void objload(char *name,OBJECT *k) // 从文件加载一个模型
{

FILE *filein; // 打开的文件句柄
char oneline[255]; // 保存255个字符
int x_f=0,y_f=0,x_c=0,y_c=0;
float height=0;

int cnt=0;
filein = fopen(name, "rt"); // 打开文本文件,供读取
while(!feof(filein))
{
cnt++;
if(1==cnt)
{
readstr(filein,oneline); // 读入一行文本
}
if(2==cnt)
{
readstr(filein,oneline); // 读入一行文本
sscanf(oneline, "%d\n", &x_f);
}
if(3==cnt)
{
readstr(filein,oneline); // 读入一行文本
sscanf(oneline, "%d\n", &y_f);
}
if(4==cnt)
{
readstr(filein,oneline); // 读入一行文本
sscanf(oneline, "%d\n", &x_c);
}
if(5==cnt)
{
readstr(filein,oneline); // 读入一行文本
sscanf(oneline, "%d\n", &y_c);
k->Xc=x_c;
k->Xf=x_f;
k->Yc=y_c;
k->Yf=y_f;
objallocate(k,k->Xc*k->Yc);
}
if(cnt>5)
{ //fseek(filein,0,SEEK_CUR);
//fread(k->points,4,x_c*y_c,filein);

for(int i=0;i<(k->Xc*k->Yc);i++)
{
readstr(filein,oneline); // 读入一行文本
sscanf(oneline, "%f\n", &height);
k->points[i].z=height; /////////////?????????????
}
}

}
fclose(filein); // 关闭文件
}

下面是初始化函数:
objload("Data/MyData.txt",&mydem);

作者: zf381345337   发布时间: 2011-12-07

额,其实问题挺明确,有点表述不清啊。。。自己顶顶

作者: zf381345337   发布时间: 2011-12-07

VERTEX_Z * points; 
这个得分配内存吧,要么就声明为数组

作者: zhaghi   发布时间: 2011-12-07

引用 2 楼 zhaghi 的回复:
VERTEX_Z * points;
这个得分配内存吧,要么就声明为数组



我是这样分的啊k->points=(VERTEX_Z*)malloc(sizeof(VERTEX_Z)*n); // 分配n个顶点的内存空间

作者: zf381345337   发布时间: 2011-12-07

该回复于2011-12-07 13:44:52被版主删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#5楼 得分:0回复于:2011-12-07 13:37:29
感觉这有问题
void objallocate(OBJECT *k,int n)
{ VERTEX_Z * a=k->points;
k->points=(VERTEX_Z*)malloc(sizeof(VERTEX_Z)*n); // 分配n个顶点的内存空间
}

作者: edencen   发布时间: 2011-12-07

引用 5 楼 zhutou100hao 的回复:
感觉这有问题
void objallocate(OBJECT *k,int n)
{ VERTEX_Z * a=k->points;
k->points=(VERTEX_Z*)malloc(sizeof(VERTEX_Z)*n); // 分配n个顶点的内存空间
}

噢,其实红色的这句没有,我调试的时候加上的

作者: zhutou100hao   发布时间: 2011-12-07