Admixior |
» 2013-01-12 20:38:53 Faktycznie coś sknociłem; powinno być tak: i =*( int * )( t =*((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i ); @down: Kurde nie wiem po co pisałem tam tą gwiazdkę. Już wszystko powinno być ok: i =*( int * )( t =((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i ); |
|
korpus2 Temat założony przez niniejszego użytkownika |
» 2013-01-12 20:56:25 już lepiej, ale i tak się sypie. Tym razem tylko w jednym miejscu mianowicie na początku przy tym znaku równości
(t=*(((int*
cannot convert int to int* |
|
DejaVu |
» 2013-01-12 21:04:26 @Admixior: jak nie chcesz pomagać to nie pomagaj - twój kod jest bezsensowny. |
|
korpus2 Temat założony przez niniejszego użytkownika |
» 2013-01-12 21:15:00 kompiluje się, ale jak się uruchomi to dalej jest ten sam błąd w tej samej linii, mianowicie komunikat: "Unhandled exception at 0x00403c80 in KodC.exe: 0xC0000005: Access violation reading location 0x8bef177c." w linii i =*( int * )( t =((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i ); |
|
Admixior |
» 2013-01-12 22:23:15 @DejaVu: chcę pomóc... @korpus: (jednak gwiazdka była potrzebna: i =*( int * )( t =( int * ) *((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i ); ) Ale i bez tego nie powinno walić błędu w tej instrukcji tylko później. Poprawiłeś przy rezerwacji na int* na int? (Patrz pierwszy mój post) Mój przykład działa na tej instrukcji: #include <iostream> #include <process.h> #include <Windows.h> using namespace std;
typedef struct { int pocz; int kon; int rozmiar; int * tab; } quick_tablica;
void quick_sort( int * t, int pocz, int kon ) { int i = pocz; int j = kon; int v; i =*( int * )( t =( int * ) *((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i ); }
void __cdecl p_quick_sort( quick_tablica data ) { quick_sort( data.tab, data.pocz, data.kon ); Sleep( 0 ); _endthread(); return; }
int main() { quick_tablica abc; abc.kon = 0xCCCC; abc.pocz = 0xBBBB; abc.rozmiar = 0xAAAA; abc.tab =( int * ) 0xBADC0DE; _beginthread(( void( * )( void * ) ) p_quick_sort, NULL,( void * ) & abc ); Sleep( 10000 ); return 0; }
|
|
korpus2 Temat założony przez niniejszego użytkownika |
» 2013-01-12 22:41:20 Ja potrzebuje to zrobić uniwersalnie, mianowicie wywołuje funkcje w programie głównym
parallel_quick_sort(parallel_quick,0,rozmiar-1,rozmiar);
gdzie tablica parallel_quick jest wypełniona jakimiś danymi z pliku, to się ma dzielić na 2 tablice, każda ma się sortować quicksortem, a potem to się ma scalić w jedną posortowaną. Twoje niestety, owszem uruchamia się ale nie sortuje.
|
|
Admixior |
» 2013-01-12 23:45:15 W sumie to powinno być uniwersalnie. Nie będzie uniwersalnie jeśli spróbujesz posortować nie wywołując to przez threada w ten sposób (tzn. bezpośrednio wywołasz tą funkcję). Natomiast jeżeli się nie sortuje to znaczy że błąd jest inny. Dokładnie jeśli chcesz wiedzieć na czym polegał problem a nie chce Ci się analizować moich krzaczków to spójrz na: void __cdecl p_quick_sort( quick_tablica data ); i zauważ co powinieneś spełnić jeżeli używasz ją przy _beginthread. |
|
ison |
» 2013-01-13 00:22:20 @Admixior jaki jest Twój cel w zaciemnianiu kodu, w którym sam się gubisz? i =*( int * )( t =( int * ) *((( int * )( i = pocz, j =( int )((( int * ) i ) + 1 ) ) ) + 2 ), j =*( int * ) j, i );
Ta linijka jest bez sensu jeśli i to index. Cały nawias zwróci i , potem robisz z tego wskaźnik i wyłuskujesz wartość. |
|
1 « 2 » 3 |