无法访问返回的结构中的指针值 [C]
Posted
技术标签:
【中文标题】无法访问返回的结构中的指针值 [C]【英文标题】:can't access the value of a pointer inside a returned struct [C] 【发布时间】:2021-04-13 00:58:45 【问题描述】:我对 C 语言还很陌生,而且我在使用指针时遇到了困难(我以前用 Python 编程)。所以,我有一个两个文件项目,主要的(.c)和另一个标题(.h)。我在标题一中声明了一个自定义类型 point_t 和一些函数,例如 p_middle,它从两个点开始计算中间点的坐标。我在头文件中测试了该函数并且它在那里工作,但是当我尝试在源文件中使用它时它没有。结构体point_t声明如下:
typedef struct point
char p_name; // stores the point name as a single character
short p_dim; // stores the point dimension (it can be omitted and calculated using p_dimension)
double *p_start_coords; // pointer to the first coordinate of coordinate list
double *p_end_coords; // pointer to the last coordinate of coordinate list
point_t;
函数 p_middle 的声明如下:
point_t p_middle (point_t p1, point_t p2)
point_t p_middle;
// p_middle initialization
// some code here
return p_middle
所以在源文件中我尝试创建两个点:
point_t p1;
point_t p2;
double coord_set1[4] = 0, 2, 3, 4;
double coord_set2[4] = 3, 1, 6, 4;
p1.p_start_coords = &coord_set1[0];
p1.p_end_coords = &coord_set1[3];
p1.p_name = 'A';
p2.p_start_coords = &coord_set2[0];
p2.p_end_coords = &coord_set2[3];
p2.p_name = 'B';
然后我尝试在源文件中做:
p_m = p_middle(p1, p2);
printf("middle point of p1p2: (%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f)\n", *p_m.p_start_coords);
但是,当我尝试运行该程序时它不起作用,它会打印随机数 - 我认为 - 数字。有解决方案的想法吗?
附:对不起,我的英语还在练习中。
【问题讨论】:
看起来您正在为仅存在于函数中的数组分配指针。这些指针在函数返回后变得悬空,因为数组不再存在 【参考方案1】:我不知道您的p_middle(point_t p1, point_t p2)
函数是如何实现的,但我确信您的p_start_coords
指针指向错误的地址。我这样写只是为了测试,它编译,没有任何问题:
point_t p_middle (point_t p1, point_t p2)
point_t p_middle;
p_middle.p_name = 'M';
p_middle.p_dim = 100;
p_middle.p_start_coords = p1.p_start_coords;
p_middle.p_end_coords = p2.p_end_coords;
return p_middle;
尝试为您的指针分配有效地址
【讨论】:
以上是关于无法访问返回的结构中的指针值 [C]的主要内容,如果未能解决你的问题,请参考以下文章