我有两个结构parent和child,如下面的代码所示。父结构有一个child类型的指针数组。当程序进入for循环时,我得到一个分段错误。我的代码有什么问题吗?我不想使用方括号的原因是,我有一个函数,它接受child类型的指针形参,并且我想将每个子指针传递给该函数,而不需要使用&
任何帮助都会很感激谢谢你
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int id;
} child;
typedef struct {
child** c;
} parent;
int main(int argc, char **argv) {
int number_of_children = 5;
parent* p = (parent*)malloc(sizeof(parent));
p -> c = (child **) malloc(number_of_children * sizeof(child*));
int i;
for(i=0; i<number_of_children; i++)
p -> c[i] -> id = i;
}
你正确地分配了子指针表,但你没有分配任何子指针。
int i
for(i = 0; i < number_of_children; ++i) {
p->c[i] = (child *) malloc(sizeof(child));
p -> c[i] -> id = i
}
未测试,但应该是以下内容:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int id;
} child;
typedef struct {
child** c;
} parent;
int main(int argc, char **argv) {
const int number_of_children = 5;
parent* p = malloc(sizeof(parent));
if(p == NULL) halt_and_catch_fire();
p->c = malloc(number_of_children * sizeof(child*));
if(p->c == NULL) halt_and_catch_fire();
for(int i=0; i<number_of_children; i++)
{
p->c[i] = malloc(sizeof(child));
if(p->c[i] == NULL) halt_and_catch_fire();
p->c[i]->id = i;
}
// free() *everything* allocated
}
正如我们所看到的,你正在尝试分配一个分段的指针到指针的东西,这显然没有必要,因为你不会分配一个以上的最内部对象。如果你试图创建一个多维数组,你不应该做一个分段混乱,而是像这样做。