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

Naruszenie dostępu do zapisu w C

Object Storage Arubacloud
0 głosów
311 wizyt
pytanie zadane 6 czerwca 2022 w C i C++ przez kacper1445 Gaduła (4,880 p.)
edycja 6 czerwca 2022 przez kacper1445

Hej mam prostą alokację pamięci

int* result_tab = malloc((end + 1) * sizeof(int));
result_tab[0] = 1;

Gdzie zmienna end jest zwykłym intem. Kompilator wyrzuca mi wyjątek "Naruszenie dostępu do zapisu". Ktoś wie o co tutaj chodzi? Dodam tylko że korzystam z kompilatora z Visual Studio.

Cały kod

#include <stdio.h>

void swap(int* tab, int index1, int index2) {
	int tmp = tab[index1];
	tab[index1] = tab[index2];
	tab[index2] = tmp;
}


// Easy sort alghoritms

void dumb_sort(int* tab_to_sort, int size) {
	int index = 0;

	do {
		if (tab_to_sort[index] > tab_to_sort[index + 1]) {
			swap(tab_to_sort, index, index + 1);
			index = 0;
			continue;
		}
		index++;
	} while (index < size - 1);
}

void bubble_sort(int* tab_to_sort, int size) {
	int index1, index2;

	for (index1 = 0; index1 < size - 1; index1++)
		for (index2 = 0; index2 < size - 1; index2++)
			if (tab_to_sort[index2] > tab_to_sort[index2 + 1]) 
				swap(tab_to_sort, index2, index2 + 1);
}

void insertion_sort(int* tab_to_sort, int size) {
	int index1, index2, tmp;

	for (index1 = size - 2; index1 >= 0; index1--)
	{
		tmp = tab_to_sort[index1];
		index2 = index1 + 1;
		while ((index2 < size) && (tmp > tab_to_sort[index2]))
		{
			tab_to_sort[index2 - 1] = tab_to_sort[index2];
			index2++;
		}
		tab_to_sort[index2 - 1] = tmp;
	}
}


// Speed sort alghoritms

void quick_sort(int* tab_to_sort, int start, int end) {
	int index1, index2, pivot;

	index1 = (start + end) / 2;
	pivot = tab_to_sort[index1];

	tab_to_sort[index1] = tab_to_sort[end];
	for (index2 = index1 = start; index1 < end; index1++)
		if (tab_to_sort[index1] < pivot)
		{
			swap(tab_to_sort, index1, index2);
			index2++;
		}
	tab_to_sort[end] = tab_to_sort[index2]; 
	tab_to_sort[index2] = pivot;

	if (start < index2 - 1)  
		quick_sort(tab_to_sort, start, index2 - 1);
	else if (index2 + 1 < end) 
		quick_sort(tab_to_sort, index2 + 1, end);
}

int* merge_sort(int* tab_to_sort, int start, int end) {
	int mid, index1, index2, index;
	int* result_tab = (int*)malloc((end + 1) * sizeof(int));
	result_tab[0] = 1;
	mid = (start + end + 1) / 2;

	if (mid - start > 1) 
		merge_sort(tab_to_sort, start, mid - 1);
	if (end - mid > 0) 
		merge_sort(tab_to_sort, mid, end);
	
	index1 = start; 
	index2 = mid;
	for (index = start; index <= end; index++)
		result_tab[index] = ((index1 == mid) || ((index2 <= end) && (tab_to_sort[index1] > tab_to_sort[index2]))) ? tab_to_sort[index2++] : tab_to_sort[index1++];

	return result_tab;
}


int main()
{
	int tab[6] = { 2, 5, 10, 1, 0, 11 };
	merge_sort(tab, 0, 5);

	for (int i = 0; i < 6; i++) {
		printf("%d ", tab[i]);
	}
}

Błąd występuje w funkcji merge_sort()

komentarz 6 czerwca 2022 przez Oscar Nałogowiec (29,290 p.)
Chwila. Kompilator czy skompilowany program?
komentarz 6 czerwca 2022 przez kacper1445 Gaduła (4,880 p.)
Podczas kompilacji, wyskakuje mi ten błąd więc kompilator
komentarz 6 czerwca 2022 przez Oscar Nałogowiec (29,290 p.)
Dodaj rzutowanie na int * wyniku malloca.

Ewentualnie to coś z plikami - kompilator nie może zapisać wyniku bo plik jest read only, ma innego właściciela albo jest w użyciu?
komentarz 6 czerwca 2022 przez kacper1445 Gaduła (4,880 p.)
Próbowałem również z rzutowaniem. Nie operuję tutaj na plikach więc to nie jest tego kwestia niestety.
komentarz 6 czerwca 2022 przez adrian17 Ekspert (344,860 p.)
Nie no, ewidentnie to jest błąd w uruchamianym programie, a nie kompilatorze.

Możesz pokazać więcej kodu, najlepiej całość?
komentarz 6 czerwca 2022 przez kacper1445 Gaduła (4,880 p.)
Dodałem cały kod w pytaniu już

1 odpowiedź

0 głosów
odpowiedź 6 czerwca 2022 przez kacper1445 Gaduła (4,880 p.)
Zadziałało dodanie biblioteki stdlib.h

Podobne pytania

0 głosów
1 odpowiedź 955 wizyt
pytanie zadane 19 listopada 2019 w C i C++ przez bakobydlak Nowicjusz (160 p.)
0 głosów
1 odpowiedź 954 wizyt
pytanie zadane 10 czerwca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...