繁体   English   中英

使用链表的分段故障C

[英]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等于04但不超过此值,也没有阻止它增大的任何限制。

考虑将您的while条件更改为i < 5或类似的条件。 我无法确定您的目标是什么while ( R != NULL )但是R在整个循环中都不会改变,因此条件一旦变为真就不会变为假,反之亦然。

编辑2:

while条件是tail != NULL时类似,仅当malloc分配内存失败时,该值才为0 在您用完太多内存以致malloc开始失败之前, i很可能会超过4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM