Member 13015247 Ответов: 2

Почему мой код выдает вывод как ошибку сегментации?


мой код компилируется, но показывает ошибку ошибки сегментации, почему?

Что я уже пробовал:

#include<stdio.h>
int main()
{int num[5],i,s,no;
for(i=0;i<5;i++)
{
    scanf("%d",&num[i]);
}
  printf("enter a number\n");
    scanf("%d",&no);
s=search(no,&num[0]);
printf("%d\n",s);
search1(no,num);
}

int i=0;
int search(int no,int *num[i])
{int x,i;
    for(i=0;i<5;i++)
    {
    if(no==*num[i])
    return 1;
    }
    return 0; 
}

int search1(int no,int *num)    
{   int i,x,k; 
    printf("your number %d is present in the list",no);
    printf("number\tfrequency");
    for(i=0;i<5;i++)
    {
        for(x=0;x<i+1;x++)
        {
        k=0;
        if(num[i]==num[x] &&i!=x)
        {k=0;
        break;}
        else
        {k=1;
        continue;}
        }
        if(k==1)
        printf("%d",num[i]);
}
}

jeron1

    for(i=0;i<5;i++)
    {
        for(x=0;x<i+1;x++)
        {
        k=0;
        if(num[i]==num[x] &&i!=x)  <====


Что происходит, когда я равен 4,
x = 5, а num [5] недопустим (допустимые индексы равны 0-4). Хотя могут быть и другие вещи
Кроме того, форматирование является жестоким. Здесь пригодился бы отладчик.

Member 13015247

x< 5 в то время, когда я=4. программа, которую я исправляю, есть проблема в *num, как вещь, но я не мог указать ошибку.

jeron1

Дох! Моя ошибка ... прости. Не могли бы вы установить точку останова и пройти через код?

jeron1

Как он компилируется? search1 должен возвращать int, но не делает этого.

Graeme_Grant

Это звучит как домашнее задание вопрос для меня. Вы знаете, что будете бороться за то, чтобы найти кого-то, кто сделает за вас домашнее задание.

Philippe Mori

- Почему поиск имеет массив указателей?
- А где ваши прототипы?
- Почему вы неправильно форматируете свой код?
- Вы уверены, что он компилируется без предупреждений?
- И использование другого имени для ваших переменных может помочь вам понять ваш код.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
мой код компилируется, но показывает ошибку ошибки сегментации, почему?

Компиляция просто означает, что код уважает синтаксис языка, но ut не означает, что он стоит Пулитцеровской премии.

Используйте отладчик, он поможет вам найти, где происходит сбой и, вероятно, причину.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

Правильный отступ помогает читать ваш код:
#include<stdio.h>
int main()
{
	int num[5],i,s,no;
	for(i=0;i<5;i++)
	{
		scanf("%d",&num[i]);
	}
	printf("enter a number\n");
	scanf("%d",&no);
	s=search(no,&num[0]);
	printf("%d\n",s);
	search1(no,num);
}

int i=0;
int search(int no,int *num[i])
{
	int x,i;
	for(i=0;i<5;i++)
	{
		if(no==*num[i])
			return 1;
	}
	return 0;
}

int search1(int no,int *num)
{
	int i,x,k;
	printf("your number %d is present in the list",no);
	printf("number\tfrequency");
	for(i=0;i<5;i++)
	{
		for(x=0;x<i+1;x++)
		{
			k=0;
			if(num[i]==num[x] &&i!=x)
			{
				k=0;
				break;
			}
			else
			{
				k=1;
				continue;
			}
		}
		if(k==1)
			printf("%d",num[i]);
	}
}


Рейтинг:
0

leon de boer

классические строки кода :-)

int i=0;
int search(int no,int *num[i]){ /// Oh really

Что меня действительно впечатлило, так это то, что вы вывели меня за пределы функции, чтобы сделать ее определенной

Подсказка заключается в том, что вы можете посмотреть, как вы передали массив в функцию search1 ... подсказка
int search1(int no,int *num){