Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Jul 2006
    Messaggi
    54

    [C++] Builder EinvalidPointer

    Qualcuno sa spiegarmi perchè?il problema ho provato a isolarlo commentando quasi tutti sembra essere in questo punto:

    m=un altra matrice h*w;
    matrice è un **
    matrice = new char*[h];
    for (int i = 0; i <= h; i++)
    matrice[i] = new char[w];
    /*for (int i = 0; i <h; i++)
    for (int j = 0; j <w; j++)
    matrice[i][j] = m[i*w+j];*/





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


    #pragma hdrstop
    #include <fstream.h>
    #include <time.h>
    #include "Unit2.h"
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    char **matrice;
    int w, h, i;

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    Edit1->Text="";
    Edit2->Text="";
    Edit3->Text="SELEZIONARE UN FILE E POI CLICCARE SU CARICA";
    Edit4->Text="";
    Edit9->Text="";
    Edit5->Text="";

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


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

    if (OpenDialog1->Execute());
    Edit3->Text=OpenDialog1->FileName;
    Button2->Enabled=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    FILE *f;

    Edit4->Text="";
    Edit5->Text="";

    char *m;
    char c;
    const char* ps = OpenDialog1->FileName.c_str();
    f = fopen(ps, "r");

    fscanf(f, "%d", &h);
    fscanf(f, "%d", &w);

    m = new char[w * h];
    i = 0;
    while(i < w * h)
    {
    if((c = fgetc(f)) == EOF)
    break;

    if(c != ' ' && c != 0x0D && c != 0x0A)
    {
    m[i] = c;
    i++;
    }
    }

    matrice = new char*[h];
    for (int i = 0; i <= h; i++)
    matrice[i] = new char[w];
    /*for (int i = 0; i <h; i++)
    for (int j = 0; j <w; j++)
    matrice[i][j] = m[i*w+j];*/

    Edit1->Text=h;
    Edit2->Text=w;
    //h=righe; w=colonne;
    int riga=0;
    //String appo="";
    int controllo=0;
    for (int i = 0; i <h; i++)
    {
    controllo=0;
    for(int j=0;j<w;j++)
    {
    if(matrice[i][j]=='*')
    {
    controllo=1;
    }
    }
    riga++;
    if(controllo==0) i=h+1;
    }
    if(controllo==0)
    {
    Edit4->Text=riga;
    for (int j = 0; j <w; j++)
    Edit5->Text=Edit5->Text+matrice[riga-1][j];
    }
    else {
    Edit4->Text="NULL";
    Edit5->Text="TUTTE LE RIGHE HANNO *"; }
    //delete[] m; */
    delete[] matrice;
    }
    //---------------------------------------------------------------------------




    /*FILE *stream = NULL;
    const char* ps = OpenDialog1->FileName.c_str();
    stream = fopen(ps, "r");
    Edit3->Text=ps;
    int row = 0;
    int column = 0;
    long int fsize;
    char charRead;
    char **matrice;
    matrice = new char*[40];
    for (int i = 0; i < 40; i++)
    matrice[i] = new char[40];
    fseek(stream, 0, SEEK_END);
    fsize = ftell(stream);
    fseek(stream, 0, SEEK_SET);

    //fsetpos(stream,fgetpos(stream, &filepos));
    do {
    do {
    charRead = fgetc(stream);
    if (charRead != ' ')
    {
    matrice[row][column] = charRead;
    column++;
    }
    } while(charRead != '\n' && ftell(stream) != fsize);
    column = 0;
    row ++;
    } while(ftell(stream) < fsize);
    Edit3->Text="";
    for (int i = 0; i < 27; i++)
    Edit3->Text=Edit3->Text+matrice[0][i];
    */


    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Edit6->Text="";
    randomize();
    for(int i=0;i<w;i++){
    Edit6->Text=Edit6->Text+random(2);
    }

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

    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    //exit(0);
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
    /*if (SaveDialog1->Execute())
    Edit3->Text=(SaveDialog1->FileName); */
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button8Click(TObject *Sender)
    {
    //Form2->Visible=true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    /*if(Edit6->Text.Length()!=w)
    {
    Edit6->Text="ERRORE:LUNGHEZZA DELL'APLOTIPO";
    Edit9->Text="NULL";
    }
    else
    {
    Edit8->Text=Edit6->Text;
    //Edit8 Aplotipo che cerco
    //Edit5 Genotipo i
    /* for(int i=0;i<h;i++)
    {
    Edit4->Text=Edit8->Text;
    Edit5->Text="";
    for(int j=0;j<w;j++){
    Edit5->Text=Edit5->Text+matrice[i][j];}
    for(int i=5;i<6;i++)
    {
    if((geno[i]=='0')&&(aplo[i]=='1'))
    break;
    if((geno[i]=='1')&&(aplo[i]=='0'))
    break;
    if((geno[i]=='*')&&(aplo[i]=='1'))
    geno[i]='0';
    if((geno[i]=='*')&&(aplo[i]=='0'))
    geno[i]='1';
    }
    Edit8->Text=geno;
    }
    } */
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Edit6Change(TObject *Sender)
    {
    //Edit9->Text=Edit6->Text.Length();
    }
    //---------------------------------------------------------------------------

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se non utilizzi i tag code del forum, il codice praticamente non si puo' leggere ...

    A prima vista, in queste righe

    matrice = new char*[h];
    for (int i = 0; i <= h; i++)
    matrice[i] = new char[w];

    prepari h elementi e ne inizializzi h+1 dato che usi <= nel ciclo ... dovresti usare < dato che da 0 ad h-1 ci sono h elementi ...

    Inutile dirti che non ho controllato se ci sono altri errori in seguito ...

  3. #3
    Utente bannato
    Registrato dal
    Jul 2006
    Messaggi
    54
    Che tag devo usare?

    Cmq il problema è che l'errore mi viene dato alla chiusura del progamma...

    in pratica uso il programma che funza poi quando chiudo la form mi da EinvalidPointer

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il tag e' CODE tra parentesi quadre ... c'e' il bottoncino # sulla finestra di edit ...

    Per il tuo problema, dovremmo andare per gradi ... intanto elimina quell'errore che ti ho detto e quando lo hai fatto vediamo il resto ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.