分段错误 C 使用链表



我写了一个返回分段错误错误的代码。代码很长,但我编写了其中的基本部分如下。请注意,主函数内已定义函数的所有变量都已定义,并且我测试了代码广告,它不会进入Function_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("%dt", *(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("%dt", 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等于0 4,但在那之后就不行了,没有什么能阻止它变得更大。

考虑将while状况更改为i < 5或类似的东西。我无法找出你的目标是什么while ( R != NULL )R在整个循环中永远不会改变,所以这个条件在为真一次或相反之后不会变成假。

编辑 2:

while条件相当tail != NULL时类似,仅当malloc未能分配内存时,该条件才会计算为0i很可能超过4,然后用完太多内存,malloc开始失败。

相关内容

  • 没有找到相关文章

最新更新