Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Access violation reading location

Ostatnio zmodyfikowano 2013-01-18 10:02
Autor Wiadomość
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 );
P-73728
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*
P-73731
DejaVu
» 2013-01-12 21:04:26
@Admixior: jak nie chcesz pomagać to nie pomagaj - twój kod jest bezsensowny.
P-73733
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 );
P-73737
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:
C/C++
#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 ) //qsort
{
    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 ) // wątek
{
    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;
}
P-73743
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.

P-73745
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.
P-73761
ison
» 2013-01-13 00:22:20
@Admixior jaki jest Twój cel w zaciemnianiu kodu, w którym sam się gubisz?

C/C++
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ść.
P-73764
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona