[英]Segmentation Fault C in use of linked list
我写了一段返回细分错误的代码。 代码很长,但我将其基本部分编写如下。 请注意,已定义了主函数内部所有已定义函数的变量,并且我测试了不在函数_1内的代码。 这就是为什么我认为问题与声明有关
typedef struct node_type
{
int data;
struct node_type *next;
} node;
typedef node *list;
void Function_1(list R, int *Matrix, int Length, int A);
int main()
{
int S = 5;
int A = 1;
int Mat1[5];
//int *Mat = malloc(S*sizeof(int));
int *Mat = &Mat1[0];
printf("Enter the Matrix with length of 10:\n");
for (int i = 0; i < S; i++)
{
scanf("%i", &(*(Mat+i)));
}
list head;
head = (list)malloc(sizeof(node));
head->next = NULL;
for (int i = 0; i < S; i++)
{
printf("%d\t", *(Mat+i));
}
//printf("\nEnter the Array = \n");
//scanf("\n%d", &A);
printf("\nA = %i", A);
Function_1(head, Mat, S, A);
while (head != NULL)
{
printf("%d\t", head->data);
head = head->next;
}
return 0;
}
void Function_1(list R, int *Matrix, int Length, int A)
{
printf("11111");
list tail;
tail = R;
int Counter = 0;
int i = 0;
while (tail != NULL)
{
if (*(Matrix+i) == A)
{
Counter++;
tail->next = (list)malloc(sizeof(node));
tail->next->data = i;
tail->next->next = NULL;
tail = tail->next;
}
i++;
}
R->data = Counter;
printf("%d", Counter);
}
谢谢
有了您提供的代码,我可以说由于缺少<stdlib.h>
或<malloc.h>
包含而导致出现分段错误或访问冲突,从而导致假定malloc
,然后将head
分配给超出您的预期的东西。
我不知道,这也可能是由于您代码中的随机点所致。
根据最新的编辑,在函数Function_1
内的循环中,您尝试访问Matrix + i
的存储内容,而i
没有限制。 可以访问i
,因为i
等于0
到4
但不超过此值,也没有阻止它增大的任何限制。
考虑将您的while
条件更改为i < 5
或类似的条件。 我无法确定您的目标是什么while ( R != NULL )
但是R
在整个循环中都不会改变,因此条件一旦变为真就不会变为假,反之亦然。
当while
条件是tail != NULL
时类似,仅当malloc
分配内存失败时,该值才为0
。 在您用完太多内存以致malloc
开始失败之前, i
很可能会超过4
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.