Release a Debug

0

Witam, gdy uruchamiam program w trybie Debug wszystko działa jak należy, lecz gdy uruchamiam ten sam kod ale w Releas'ie dostaję od razu Acces Violation:
0xC0000005: Access violation reading location 0x00000001

Pewnie jest to problem ze strukturą, wygląda ona tak:

typedef struct
{
    Typ* zmienna;
    Typ* zmienna;
     int x,y;
} Struktura;

Później tworzę ją i ustawiam na nią wskaźnik:


Struktura Nowa;
Struktura* Wsk = &Nowa;

No i mam funkcję, która przyjmuje:


void Funkcyja(Struktura* data)
{
coś tam coś tam i na przykład chce:
data->x = 5;

No i w takiej funkcji wyrzuca mi właśnie błąd, pewnie to jest coś prostego, szukałem na necie i w większości przypadków chodzi o wskaźniki, najprawdopodobniej przez to że któryś wskazuje na NULL.

0

pokaz fragment kodu w ktorym wywolujesz tą funkcyje. acces ciolation pojawia sie gdy probujesz zmieniac w kodzie fragment pamieci do ktorego nie masz dostepu, co oznacza ze data w tej funkcji musi byc albo nieprawidlowym albo niewaznym wskaznikiem

0

A może odwołujesz się do tych pól ze wskaźnikami bez alokacji pamięci do nich?

0

W sensie, jeżeli potrzebujesz dostępu do swojej struktury w innym bloku kodu niż alokowałeś miejsce pod niego na stosie, użyj dynamicznej alokacji (malloc, new). W twoim przypadku, tego obiektu pod tym wskaźnikiem może już nie być.

0

W jednej funkcji tworzę tą strukturę i ją uzupełniam i potem dzięki tej drugiej funkcji chce zmienić jej wartości. Więc muszę zrobić za pomocą dynamicznej alokacji?

0

Tak, bo po wyjściu z funkcji ta zmienna znika jeśli jest na stosie.

0

Jak zwykle macie racje ; p
Dałem dla testu jako zmienną globalną i wtedy nie wyrzuca błędu, dzięki wielkie za poświęcony czas i rozwiązanie problemu.

Pozdrawiam.

0

A w ogóle to czym się różni Debug od Release

0
ziomek234 napisał(a)

A w ogóle to czym się różni Debug od Release

http://www.google.com/search?[...]ase&ie=utf-8&oe=utf-8

Wiem, że jesteś nowy na forum ale zanim zadasz jakieś pytanie to zapytaj łaskawie wcześniej googla albo wyszukiwarkę forum.

0

Witam, ponownie ; p
Zaalokowałem sobie tą strukturę na stercie no i działa pięknie, ale zauważyłem że przy zwalnianiu tej przydzielonej pamięci kompilator mi debugger mi rzuca:
First-chance exception at 0x7c96df51 in Ekseprymetnowanie.exe: 0xC0000005: Access violation reading location 0xfffffff9.

Ale działa bez problemu, jednak nie jestem pewien czy na pewno wszystko tam dobrze się dzieje. Funkcja do usunięcia pamięci jest wywoływania wtedy kiedy się zamknie program.
Alokacja:


StrukturaDrawing* Wsk;
Wsk = (StrukturaDrawing*)malloc(sizeof(StrukturaDrawing));

Posprzątanie:

void Wyjscie( StrukturaDrawing* data)
{
    free(data);
    data = NULL;
}

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