将结构指针作为函数参数传递(Seg fault unknown)

时间:2015-09-15 03:35:12

标签: c pointers structure

头文件#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%确定代码没有改变。你能看到什么错了吗?

2 个答案:

答案 0 :(得分:1)

试试这个 -

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

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

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

修改

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

在功能中这样做 -

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

但请记住free已分配内存。

答案 1 :(得分:1)

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

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

这样的东西
Vector Vec;
Vec.cityArray[0]->name ....

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