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

question-closed C++ Borland 6 Access violation

Object Storage Arubacloud
0 głosów
937 wizyt
pytanie zadane 8 lutego 2018 w C i C++ przez qwerty723446 Obywatel (1,750 p.)
zamknięte 11 lutego 2018 przez qwerty723446
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <cstdlib>
#include <fstream.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int selected=0;
int code[12][12][10];

 fstream f2;
 fstream c;
//---------------------------------------------------------------------------
void __fastcall TForm1::Image22MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button==mbRight)
{
 f2<<"0"<<endl; f2<<"0"<<endl;
 Form2->Visible=true;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{

  for(int i=0; i<=11; i++)
 {
  for(int o=0; o<=11; o++)
  {
   for(int p=0; p<=9; p++)
   {
    code[i][o][p]=0;
   }
  }
 }

 f2.open("config/f2.pnpconfig", ios::in | ios::out);
 c.open("config/code.pnpconfig", ios::out | ios::in);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
f2.close();
c.close();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Image23MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 if(Button==mbRight)
{
 f2<<"0"<<endl<<"1"<<endl;
 Form2->Visible=true;
}
}

Ostatnia funkcja w podanym fragmencie kodu powtarza się kilkanaście razy, tylko dla innych obiektów Image.

 

W powyższym kodzie coś powoduje, że gdy program kompiluje i odpalam, wyskakuje błąd Project Project1.exe raised exception class EAcceViolation with message 'Acces violation at adress 00502BA5. read of adress 00000000'. Process stopped. use Sted or run to continue. Przy wciśnięciu step problem się powtarza. Podobnie przy run. Gdy program włączam przez eksplorator windows, błąd się nie pokazuje, sęk w tym, że program też.

komentarz zamknięcia: Problem rozwiązany (przynajmniej jeden z kilku)

1 odpowiedź

0 głosów
odpowiedź 9 lutego 2018 przez j23 Mędrzec (194,920 p.)

Zgaduje, że Form2 jest null. Jak tworzysz okno Form2?

 

Pozbądź się tych okropnych zmiennych globalnych. Zrób selected, code, f2 i c prywatnymi polami klasy TForm1 (daj też jakieś sensowniejsze nazwy).

 

PS. zamiast endl używaj '\n'. Nie ma potrzeby flushowania strumienia co chwilę.

 

 

komentarz 10 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
Okno Form2 tworzę tak jak na kursie u Pana Mirosława Zelenta, poprzez ShowModal.
komentarz 10 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
Udało się, program nie wyrzuca już błędów, ale zauważyłem coś innego: fstream c nie nadpisuje pliku w kółko, ale dokleja nową zawartość na jego koniec, tak jakby był ios::app. Dla czego? fstream f2 natomiast w ogóle nic nie robi z plikiem.
komentarz 10 lutego 2018 przez j23 Mędrzec (194,920 p.)

Dodaj flagę ios::trunc.

komentarz 10 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
Nadal nie działa
komentarz 10 lutego 2018 przez j23 Mędrzec (194,920 p.)

Pokaż, jak dodałeś tę flagę.

 

PS. jeśli używasz strumieni tylko do zapisu, użyj std::ofstream.

komentarz 10 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
f2.open("config/f2.pnpconfig", ios::in | ios::out | ios::trunc);

 

komentarz 11 lutego 2018 przez j23 Mędrzec (194,920 p.)
Pewny jesteś, że plik tworzy się tam gdzie powinien?
komentarz 11 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
Tak, tworzy się tam gdzie powinien, sprawdziłem nawet usuwając z kodu folder, tworząc plik bezpośrednio w folderze z aplikacją. Pliki oba się utworzyły, ale zachowywały się tak jak wcześniej: f2 pozostawał pusty, mimo że wyraźnie warunek się wykonywał i polecenie za nim też się wykonywało.
komentarz 11 lutego 2018 przez j23 Mędrzec (194,920 p.)
Szczerze mówiąc, jest mało prawdopodobne, by strumień nic nie zapisał do pliku, jeśli zostało coś do niego (poprawnie) wysłane.

 

Za mało danych, żeby coś konkretnego napisać...
komentarz 11 lutego 2018 przez qwerty723446 Obywatel (1,750 p.)
Dziękuję za pomoc, pewnie mam coś źle w kodzie, poszukam sam, najwyżej napiszę znowu na forum w innym wątku.

Podobne pytania

0 głosów
3 odpowiedzi 1,323 wizyt
pytanie zadane 30 sierpnia 2015 w C i C++ przez gniewko717 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 193 wizyt
0 głosów
1 odpowiedź 274 wizyt

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 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!

...