Wątek przeniesiony 2017-06-05 12:00 z C/C++ przez ŁF.

program sortujący losowanie

0

Robiłem sobie program w celach ćwiczeniowych wracając troche do pseudolosowości dla powtórzenia i napotkałem na problem którego sam nie widze na razie. program się kumpiluje ale po wczytaniu zmiennej "przestał działac", ciekawsze jest to że jak go robiłem w devc++ na innym kompie dla kummpla to działało, jak odpaliłem na swoim w code blocks to juz nie...
wklejam kod, może ktoś zauważy dlaczego sie wysypuje:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n;
clock_t start, stop;
double czas;

int porownaj_int( const void* a, const void* b )
    {
     int* arg1 = (int*) a;
     int* arg2 = (int*) b;
     if( *arg1 < *arg2 ) return -1;
     else if( *arg1 == *arg2 ) return 0;
     else return 1;
    }

int main(void) {
	srand( time( NULL ) );
	int *liczby,i;
	printf("podaj n:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
    	liczby[i]=(rand() % 1000 );
	}
	start=clock();
	qsort( liczby, n, sizeof(int), porownaj_int );
	stop=clock();
	czas=(double)(stop-start)/CLOCKS_PER_SEC;
	printf("posortowane:\n");
	for(i=0;i<n;i++)
	{
		printf("%d\n",liczby[i]);
	}
	printf("czas sortowania: %lf",czas);
}
0

Masz niezainicjalizowaną zmienną liczby. Ta zmienna powinna być również tablicą a nie wskaźnikiem.

0

czyli jak? zawsze robiłem w ten sposób i było dobrze. bo teraz w sumie przerzuciłem się na C a w cześniej uczyłem się więcej c++ i tam normalnie inicializowalem tablice dynamiczna przy uzyciu liczby=new int(n) w tym przypadku ale w C tak to nie działa

0
int* liczby = new int[5]; 

To działa bo zmienna liczby jest wskaźnikiem na pierwszy element z tablicy.
Odpowiednikiem C jest:

int* liczby = (int*)malloc(sizeof(int) * n);
0

ok, dzięki, zmieniłem co trzeba działa, tylko mam pytanie jeszcze tak z ciekawości,
bo w c++ jak robiłem tablice za pomocą new int'a to potem jeszcze zwalniałem pamięć np, takim zapisem

delete [] tablica;

a w C jak wyglądać będzie odpowiednik?

1

free(tablica)

1 użytkowników online, w tym zalogowanych: 0, gości: 1