在老师提供给我们的教科书中,有这个 C 代码的示例,当我尝试运行时,它给出了一个分段错误:
const celula *nulo = NULL;
typedef char informacao;
typedef celula *noh;
typedef celula *arvore;
struct celula {informacao info; noh pai; noh fesq; noh idir;};
...
typedef struct celfloresta celfloresta;
typedef struct celfloresta *floresta;
typedef struct celfloresta *posicfloresta;
struct celfloresta {arvore elem; celfloresta *prox;};
...
void FormarListaNohs(){
floresta p = (floresta)malloc(sizeof(celfloresta));
p->elem->info = '3';
}
...
为什么这条线p->elem->info = '3';
在这里给出分段错误?
elem
是一个指针。您需要为其分配内存:
p->elem = malloc(sizeof(arvore));
基本上 malloc 返回一个 void 指针,然后强制转换应该使用指针类型的变量 一个例子 :
int *p = malloc(sizeof(int))
struct s_list *l = malloc(sizeof(struct s_list))
然后,您可以取消引用指针,例如
l->data = 12;