所以,我在imprimeL.c文件中有此功能,该文件打印l(* LInt)的每个整数,它显示段错误
(l -> prox) -> valor = 2
(l -> prox) -> prox = NULL;
我的imprimeL函数定义明确,我的ligligada结构是:
typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;
void imprimeL(LInt l){
LInt aux;
while(l != NULL){
printf("%d\n", l-> valor);
aux = l-> prox;
free(l);
aux = NULL;
l = aux;
}
}
int main(){
LInt l = malloc(sizeof(struct lligada));
l -> valor = 1;
(l -> prox) -> valor = 2;
(l -> prox) -> prox = NULL;
imprimeL(l);
printf("Ola\n");
return 0;
}
答案 0 :(得分:1)
当您访问您无权访问的内存地址时,就会发生分段错误。在您为l分配内存的情况下,您的lligada数据结构如下:
int valor -> some garbage value
struct lligada *prox; -> NULL pointer
因此,当您访问l-> prox-> prox时,您尝试访问的是导致段错误的空指针。
为避免这种情况,您可以在访问代理元素之前为其分配内存。
答案 1 :(得分:0)
您可能想要这样:
#include <stdlib.h>
#include <stdio.h>
typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;
void imprimeL(LInt l) {
LInt aux;
while (l != NULL) {
printf("%d\n", l->valor);
aux = l->prox;
free(l);
l = aux;
}
}
int main() {
LInt l = malloc(sizeof(struct lligada));
l->valor = 1;
LInt l1 = malloc(sizeof(struct lligada));
l->prox = l1;
l1->valor = 2;
l1->prox = NULL;
imprimeL(l);
printf("Ola\n");
return 0;
}
您的imprimeL
函数中还有一个错误。
下一步是使用循环动态创建链接列表。