Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将结构指针作为函数参数传递(Seg错误未知)_C_Pointers_Structure - Fatal编程技术网

C 将结构指针作为函数参数传递(Seg错误未知)

C 将结构指针作为函数参数传递(Seg错误未知),c,pointers,structure,C,Pointers,Structure,头文件#1“city.h” 头文件#2“vector.h” C文件 #include "vector.h" #include "city.h" #include <stdlib.h> void init(Vector *ptr) { ptr->cityArray[0]->name = "hi"; // Error Seg Fault! } #包括“vector.h” #包括“city.h” #包括 void init(向量*ptr){ ptr->cityArra

头文件#1“city.h”

头文件#2“vector.h”

C文件

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


void init(Vector *ptr) {

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

}
#包括“vector.h”
#包括“city.h”
#包括
void init(向量*ptr){
ptr->cityArray[0]->name=“hi”//错误分段错误!
}

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

试试这个-

  ptr->cityArray[0]->name = "hi";       // ptr is pointer to struct vector
由于
cityArray
是struct
Vector
的成员变量,请使用struct变量或指针访问它

不能这样做
cityArray[0]->name=“hi”cityArray
不是任何独立的指针数组

编辑 当您遇到分段错误时,需要将内存分配给struct pointer
ptr
以及struct
city
中存在的
char*

在功能上是这样做的-

ptr=malloc(sizeof(Vector));
ptr->cityArray[0]->name=malloc(3);     // size 3 to store "hi" you can give desired size.
但请记住释放分配的内存。

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

也就是说,
cityArray
本身不是自变量,它被称为成员变量。您需要一个结构类型的变量才能使用
cityArray
。差不多

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

等等。还要注意变量的类型和使用的初始值设定项。它们应该匹配。

另一个问题是
name
char**
“hi”
const char*
。您好,您的建议确实有效,但出于某种原因,我现在遇到了Seg故障,尽管我100%确定代码没有更改。你能看到什么地方出了问题吗?@JackW你需要给它分配内存。请查看答案中的编辑。您好,您的建议确实有效,但由于某些原因,我现在遇到Seg故障,尽管我100%确定代码没有更改。你能看看出了什么问题吗?
ptr=malloc(sizeof(Vector));
ptr->cityArray[0]->name=malloc(3);     // size 3 to store "hi" you can give desired size.
Vector Vec;
Vec.cityArray[0]->name ....