无法访问返回的结构中的指针值 [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]的主要内容,如果未能解决你的问题,请参考以下文章

分段错误(核心转储) - 无法访问的计数器值

C/C++中的指针

访问指向结构的指针会导致内存读取冲突

C和指针之结构体和联合体

如何在 C# 中编组指向一系列以 null 结尾的字符串的指针?

返回指向结构的指针并访问其字段 C++