【问题标题】:Passing a structure pointer as a function argument (Seg fault unknown)将结构指针作为函数参数传递(Seg 错误未知)
【发布时间】:2015-09-15 03:35:11
【问题描述】:

头文件#1“city.h”

typedef struct City{

    double* lat;
    double* lon;
    double* pop;


    char* airport;
    char* name;


}City; 

头文件#2“vector.h”

typedef struct Vector{


  City* cityArray[26];  // 26 pointers to struct City


 }Vector;

C 文件

#include "vector.h"
#include "city.h"
#include <stdlib.h>


void init(Vector *ptr) {

ptr->cityArray[0]->name = "hi"; // Error Seg Fault!

}

您好,您的建议确实有效,但由于某种原因,我现在遇到了 Seg 错误,即使我 100% 确定代码没有更改。你能看出什么问题吗?

【问题讨论】:

  • 另一个问题是namechar **"hi"const char *

标签: c pointers structure


【解决方案1】:

试试这个 -

  ptr->cityArray[0]->name = "hi";       // ptr is pointer to struct vector

由于 cityArray 是结构体 Vector 的成员变量,因此使用结构体变量或指针访问它。

不能这样做 cityArray[0]-&gt;name = "hi";因为cityArray 不是任何独立的指针数组。

编辑

当您遇到分段错误时,您需要为结构指针ptr 以及结构city 中的char * 分配内存。

在函数中这样做 -

ptr=malloc(sizeof(Vector));
ptr->cityArray[0]->name=malloc(3);     // size 3 to store "hi" you can give desired size.

但记得要free分配内存。

【讨论】:

  • 嗨,您的建议确实有效,但由于某种原因,我现在遇到了 Seg 错误,即使我 100% 确定代码没有更改。你能看出什么问题吗?
  • @JackW 你需要给它分配内存。请参阅答案中的编辑。
【解决方案2】:

在您的情况下,vector.h 出现在 city.h 之前。您需要将 city.h 放在 vector.h 之前,以使 city 的定义对 vector 可见。

也就是说cityArray本身并不是一个独立的变量,它被称为成员变量。您需要有一个结构类型的变量才能使用cityArray。类似的东西

Vector Vec;
Vec.cityArray[0]->name ....

等等。还要记下变量的类型和使用的初始化程序。它们都应该匹配。

【讨论】:

  • 嗨,您的建议确实有效,但由于某种原因,我现在遇到了 Seg 错误,即使我 100% 确定代码没有更改。你能看出什么问题吗?
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2020-11-08
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多