头文件#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%确定代码没有改变。你能看到什么错了吗?
答案 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 ....
等等。还要记下变量的类型和使用的初始化程序。它们都应该匹配。