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

Builder nie dołącza biblioteki fstream do projektu

Object Storage Arubacloud
0 głosów
360 wizyt
pytanie zadane 14 września 2016 w C i C++ przez Paweł Nowicjusz (120 p.)
otwarte ponownie 18 września 2016 przez Eryk Andrzejewski

Witam

W pliku nagłówkowym jak i tym z cpp dodałem #include <fstream> (w pliku .cpp dla pewności bo jestem poczatkujacy ;D). Program, który napisałem w oparciu o tą bibliotekę działa w 100%. Problem zaczyna się kiedy chcę dołączyć do pliku .exe niezbędne biblioteki, które umożliwią działanie programu na komputerze mojej dziewczyny (Project-Options-Linker-use dynamic RTL oraz w packages-build with runtime packages). Odznaczam te opcje.  Cytuje błąd podczas kompilacji z odznaczonymi powyższymi opcjami. Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004927E1. Read of address 00000000'. Process stopped. Use Step or Run to continue.

Jeżeli to pomoże w główkowaniu dodam że przy próbie uruchomienia dowolnego działającego w 100% programu napisanego przeze mnie najpierw musze potwierdzić błąd. Cytuje. Access violation at address 007CFE48 in module 'coreide60.bpl'. Read of address 00000008.

Moim problemem jest to że program po dodaniu bibliotek do .exe przestaje działąć nawet u mnie. a Bez tych bibliotek działa.

Dziękuje z góry za pomoc. ;)

komentarz 14 września 2016 przez MetGang Nałogowiec (34,360 p.)
Jedna ważna uwaga. Builder nie posiada/obsługuje biblioteki <fstream> tylko <fstream.h>.
komentarz 14 września 2016 przez bartolinciu Dyskutant (7,580 p.)
edycja 18 września 2016 przez bartolinciu
Jakbyś wkleił kod byłoby pomocne. Acces violation znaczy, że program próbował "dobrać się" do pamięci do której nie miał praw. Read of address ... znaczy, że program próbował odczytywać z adresów 00000000 i 00000008 gdzie pamięć prawdopodobnie nie jest zaalokowana.
komentarz 15 września 2016 przez Paweł Nowicjusz (120 p.)
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <fstream.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//AnsiString a[400];

AnsiString a;
const char* ptr;

fstream plik;
string linia;
string slow[400];
AnsiString slowa[10];
AnsiString odp[10];
int nr_lini=1;
int liczba[10];
int punkty=0;
int i=0;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        Button1->Enabled=false;
        Label1->Caption="--";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Otwrz1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
   {
     // Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
     a=(OpenDialog1->FileName);
     ptr=a.c_str();                  //konwersja AnsiString to const char* i dziala ;D
      plik.open(ptr, ios::in);
      while(getline(plik,linia))
      {
        slow[i]=linia;
        i++;
      }
       srand(time(NULL));
      for(int i=0;i<10;i++)
      {
        liczba[i]=rand()%200+1;
        slowa[i]=slow[liczba[i]].c_str();    // aby wyswietlic cos w label musi to byc ansi, lub ansi[]
        liczba[i]+=200;
        odp[i]=slow[liczba[i]].c_str();
        Memo1->Lines->Add(slowa[i]);         // lub podajemy w "" co chcemy wyswietlic, lub w String, nie w string!!!
      }

      plik.close();
      ptr=NULL;
      Button1->Enabled=true;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

        if(odp[0]==Memo2->Lines->Strings[0])   punkty++;
        if(odp[1]==Memo2->Lines->Strings[1])   punkty++;
        if(odp[2]==Memo2->Lines->Strings[2])   punkty++;
        if(odp[3]==Memo2->Lines->Strings[3])   punkty++;
        if(odp[4]==Memo2->Lines->Strings[4])   punkty++;
        if(odp[5]==Memo2->Lines->Strings[5])   punkty++;
        if(odp[6]==Memo2->Lines->Strings[6])   punkty++;
        if(odp[7]==Memo2->Lines->Strings[7])   punkty++;
        if(odp[8]==Memo2->Lines->Strings[8])   punkty++;
        if(odp[9]==Memo2->Lines->Strings[9])   punkty++;
        Label1->Caption=punkty;

 

       /*for(int i=0;i<400;i++)
        {
                a[i]=Memo1->Lines->Strings[i].c_str();
                Memo2->Lines->Add(a[i]);
        }   */

}
//---------------------------------------------------------------------------

a W nagłówkowym nic nie zmianiałem

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <Dialogs.hpp>
#include <fstream.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
        TMainMenu *MainMenu1;
        TMenuItem *Plik1;
        TMenuItem *Otwrz1;
        TOpenDialog *OpenDialog1;
        TMemo *Memo2;
        TButton *Button1;
        TLabel *Label1;
        TLabel *Label2;
        void __fastcall Otwrz1Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Mam nadzieje że to pomoże ;) Jak widać miałem tutaj <fstream.h> zapomniałem dopisac .h jak pisałem pytanie ;p

1 odpowiedź

0 głosów
odpowiedź 18 września 2016 przez jeremus Maniak (59,720 p.)
// w tym fragmencie jest możliwe że liczba[i]=400 a to wykracza poza rozmiar tablicy slow ( od 0 do 399 )
    liczba[i]=rand()%200+1;
        slowa[i]=slow[liczba[i]].c_str();    // aby wyswietlic cos w label musi to byc ansi, lub ansi[]
        liczba[i]+=200;
        odp[i]=slow[liczba[i]].c_str();

 

komentarz 18 września 2016 przez Paweł Nowicjusz (120 p.)
Masz całkowitą RACJĘ !!! ;D Co ciekawe (po tym jak poprawiłem błąd, który zauważyłeś (przestałem dodawać 1 po losowaniu)) stworzyłem Memo3 na próby i wyświetlałem różne rzeczy z moich różnych ( ;D) tablic. Więc okazało się że tablica slow[403] zawiera w sobie jakiegoś tam stringa wylosowanego !!! Przy [404] już pojawiał się błąd. Jak to możliwe ??

Kodowanie w code::Blocks było takie łatwe a tutaj nie kumam tych string, String i AnsiString. muszę poczytać książkę chyba. Ostatnio doszła do mnie nowa i mam nadzieje że coś tam będzie o tych bibliotekach string.

Ponad to wydaje mi się że mój kod można uprościć bo ten tutaj jest chyba nieczytelny z tymi różnymi string i AnsiString. Chciałbym umieć używać jednego typu.

Błąd nadal się pojawia przy próbie dołączenia bibliotek.

Podobne pytania

0 głosów
2 odpowiedzi 1,263 wizyt
0 głosów
1 odpowiedź 675 wizyt
0 głosów
1 odpowiedź 291 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

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

...