菜鸟求解——〉〉包含结构体指针的结构体的使用问题
时间: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);
下面是我定义的结构体
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;
这个得分配内存吧,要么就声明为数组
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
|
作者: 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个顶点的内存空间
}
感觉这有问题
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28