我写了一个返回分段错误错误的代码。代码很长,但我编写了其中的基本部分如下。请注意,主函数内已定义函数的所有变量都已定义,并且我测试了代码广告,它不会进入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
未能分配内存时,该条件才会计算为0
。 i
很可能超过4
,然后用完太多内存,malloc
开始失败。