• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C - Sortowanie, wskaźniki, funkcja

VPS Starter Arubacloud
0 głosów
240 wizyt
pytanie zadane 28 kwietnia 2017 w C i C++ przez galezovsky Nowicjusz (230 p.)

Powie mi ktoś, dlaczego to się wysypuje. Debbuger wyrzuca bład przy free(arr)

#include "stdafx.h"
#include "stdlib.h"

int bubble_sort(int n, int *arr)
{
	for (int i = 1; i <= n; i++)
	{
		printf("Enter values: ");
		scanf_s("%d", &arr[i]);
	}

	for (int i = 1; i <= n - 1; i++)
	{
		for (int j = 1; j <= n - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = tmp;
			}
		}
	}
	return *arr;
}

int main()
{
	int n, *arr;
	printf("Please, enter how much number want you sort: ");
	scanf_s("%d", &n);

	arr = (int*)malloc(n * sizeof(int));

	bubble_sort(n, arr);

	puts("Sortowanie bąbelkowe...");
	for (int i = 1; i <= n; i++)
		printf("%d ", arr[i]);

	free(arr);
	getchar();
	getchar();
	return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 28 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Zwracasz wskaźnik: return *arr; A w definicji funkcji masz zwracanie typu int: int bubble_sort(int n, int *arr).
komentarz 28 kwietnia 2017 przez galezovsky Nowicjusz (230 p.)
No tak, ale to co powinienem zrobić?
komentarz 28 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
int * bubble_sort(int n, int *arr) { ... } . Ale piszę z telefonu i tylko to mi się rzuciło w oczy..
komentarz 28 kwietnia 2017 przez criss Mędrzec (172,590 p.)
Nie no, na wskaźniku jest dokonywana dereferencja, więc jest ok... Tylko nie wiem czy o to autorowi chodziło, bo zwracana jest po prostu wartość pierwszego elementu tablicy... Anyway w tym kodzie nie ma to większego znaczenia, bo i tak nie przypisujemy wyniku bubble_sorta do czegokolwiek.

A błąd pewnie wynika z założenia, że tablice są indeksowane od 1. Pierwszym indeksem jest 0,a ostatnim n - 1.
0 głosów
odpowiedź 28 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)

1. Błąd w algorytmie.

2. Zbędne zwracanie .. czegokolwiek.

3. W przypadku scanf(...) dla wartości dziesiętnych, nie ma niebezpieczeństwa przepełnienia bufora. 

4. Indeksujemy tablice od 0.

5. Typ indeksu to size_t.

#include <stdlib.h>
#include <stdio.h>
 
void bubble_sort(size_t n, int *arr)
{
    for (size_t i = 0; i < n; ++i)
    {
        printf("Enter values: ");
        scanf(" %d", &arr[i]);
    }
 
    for (size_t i = 0; i < n - 1; ++i)
    {
        for (size_t j = 0; j < n - 1 - i; ++j)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}
 
int main()
{
    size_t n;
    int *arr;
    printf("Please, enter how much number want you sort: ");
    scanf(" %zu", &n);
 
    arr = malloc(n * sizeof(int));
 
    bubble_sort(n, arr);
 
    puts("Sortowanie bąbelkowe...");
    for (size_t i = 0; i < n; ++i)
        printf("%d ", arr[i]);
 
    free(arr);

    return EXIT_SUCCESS;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 238 wizyt
0 głosów
2 odpowiedzi 500 wizyt
pytanie zadane 25 grudnia 2020 w C i C++ przez dark41 Użytkownik (760 p.)
0 głosów
2 odpowiedzi 336 wizyt
pytanie zadane 24 listopada 2018 w C i C++ przez eSpring Początkujący (270 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...