#include<stdio.h>
#include<stdlib.h>
int *id,N;
main()
{
FILE* file=fopen("a.txt","r");
int i,p,q,c;
fscanf(file,"%d",&N);
id=(int *)malloc(N*sizeof(int));
for(i=0;i<N;i++)
*(id+i)=i;
while(!feof(file))
{
fscanf(file,"%d %d",&p,&q);
if(!connected(p,q))
unn(p,q);
}
fclose(file);
c=1;
while(c==1)
{
scanf("%d %d",&p,&q);
printf("%d\nYes(1) or No(0) ",connected(p,q));
scanf("%d",&c);
}
}
connected(int p,int q)
{
return((root(p))==(root(q)));
}
unn(int p,int q)
{
int j=root(q);
int i=root(p);
*(id+j)=i;
}
root(int i)
{
while(i!=(*(id+i)))
i=*(id+i);
return(i);
}
При компиляции не отображается сообщение об ошибке. Однако, когда я пытаюсь выполнить эту программу, она говорит: «Ошибка сегментации (сбрасывается ядром). Почему это происходит? Как можно заметить, это попытка реализовать быстрый союз.Quick Union Implementation in C
Быстрая находка была выполнена . без каких-либо хлопот, используя один и тот же файл «a.txt» лишь несколько настроек для этого кода в снаряженном GDB, он говорит:
«Программа получила сигнал SIGSEGV, сегментация Fault
0x08048729 в к.т. (я = 134761) at ic: 47 "
Значение переменной" i "при каждом запуске составляет 134761, что не должно быть искренним e значения только от 1 до 11 в текстовом файле.
* Да или Нет для запроса пользователя.
Вы должны использовать отладчик, чтобы выполнить код и где он разбился. Сбой сегментации означает доступ к памяти недопустимого адреса. – egur
@egur В функции rt() – Alex
НИКОГДА не выполняйте результат malloc() –