[ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.07.09
Prihlásený: 03.07.09
Príspevky: 1
Témy: 1 | 1

zdravým všetkých.
v c++ pracujem len druhý den. a po napísaní mojho DLL sa mi vyslitla neznáma chyba.
dll mi normálne funguje. masku môžem vytvoriť, nastaviť jej obsah. následne ho načítať. potom uložiť , aj načítať.
problém nastáva vtedy ked vypnem program ktorý dll používa. po vypnutí sa shrúti .
týmto prsím niekoho ochotného. či by mi mohol spraviť kolektúru celého kódu. podla mna je jednoduchšie ako písať tu čo všetko mám zle. takisto netuším ako spraviť deinicializáciu dll.

každému som vopred vďačný.
(kódované v devc++)
zdroják:
Kód:
// C/C++
#define export extern "C" __declspec (dllexport)
#include <windows.h>
#include <vector>
#include <fstream>
#include <stdio.h>

using namespace std;

class MASK
{
      private:
              int width;
              int height;
              vector< vector<char> > pole;
      public :
      MASK(){}
      MASK(int w, int h)
      {
             width=w;
             height=h;
             pole.resize(w);
             for (int i; i<w;i++)
             {
                 pole[i].resize(h);
             }
             for (int i=0;i<w;i++)
             {
                 for (int e=0;e<h;e++)
                 {
                     pole[i][e]=false;
                 }
             }
      }
       
      void set_element(int w, int h,char value)
      {
          pole[w][h]=value;
      }
       
      char get_element(int w, int h)
      {
          return (pole[w][h]);
      }
      int get_width()
      {
          return (width);
      }
      int get_height()
      {
          return (height);
      }
      int empty()
      {
          for (int i; i<width;i++)
          {
              pole[i].empty();
          }
          pole.empty();
      }
};

vector< MASK *>  zoznam_mask;
int last_mask;
export double init()
{
       last_mask=1;
}

export double create_mask(double w, double h)
{
       zoznam_mask.resize(zoznam_mask.size()+1);
       zoznam_mask[zoznam_mask.size()]= new MASK((int)w,(int)h);
       return (zoznam_mask.size());
}
export double mask_set_element(double id, double w, double h,double value)
{
       zoznam_mask[(int)id]->set_element( (int)w, (int)h, (int)value);
}

export double mask_get_element(double id, double w, double h)
{       
       return (zoznam_mask[(int)id]->get_element( (int)w, (int)h));
}

export double mask_save(double id,char *fname)
{
          MASK * ukMask = zoznam_mask[(int)id];
          FILE *fsave;
          int w = ukMask->get_width();
          int h = ukMask->get_height();
          long buff_size=w*h+(sizeof(int)*2);
          char buffer[buff_size];
           
          fsave = fopen(fname, "wb");
          setbuf(fsave,buffer);
          if (!fsave) {fclose(fsave); return (-1);}
          fwrite(&w,sizeof(int),1,fsave);
          fwrite(&h,sizeof(int),1,fsave);
          for (int i=0;i<w;i++)
          {
              for (int e=0;e<h;e++)
              {
                  if (ftell(fsave)>buff_size) {fclose(fsave); return (-2);}
                  char value=ukMask->get_element(i,e);
                  fwrite(&value,sizeof(char),1,fsave);
              }
          }
          fflush(fsave);
          fclose(fsave);
          return (true);
}

export double mask_load(char *fname)
{
           
          FILE *fload;
          fload = fopen(fname, "rb");
          int w ;
          int h ;
           
          if (!fload) {fclose(fload); return (-1);}
          fread(&w,sizeof(int),1,fload);
          fread(&h,sizeof(int),1,fload);
          MASK * ukMask = new MASK(w,h);
          zoznam_mask.resize(zoznam_mask.size()+1);
          zoznam_mask[zoznam_mask.size()] = ukMask;

          for (int i=0;i<w;i++)
          {
              for (int e=0;e<h;e++)
              {
                  char value;
                  fread(&value,sizeof(char),1,fload);
                  ukMask->set_element( i, e, value);
              }
          }
          fclose(fload);

          return (zoznam_mask.size());//zoznam_mask.size()
}

export double mask_delete(double id)
{
       zoznam_mask[(int)id]->empty();
       delete(zoznam_mask[(int)id]);
}

ešte by som doplnil, že do dll môžem odoslať premenné len typu double a char .


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.07.09
Prihlásený: 14.01.13
Príspevky: 28
Témy: 3 | 3
NapísalOffline : 13.07.2009 19:58 | Neznáma chyba. prosím o korektúru [c++]

Pravdepodobe chyba bude pri funkcii mask_delete. Po prve, metoda empty len vrati, ci je vector prazdny, alebo nie. A pred uvolnovanim pamate "delete" by bolo dobre skontrolovat, ci taky elemt existuje. Asi by som to riesil takto:

Kód:
export double mask_delete(double id)
{
       if (!zoznam_mask[(int)id]->empty() && zoznam_mask.size() > (int)id && zoznam_mask[(int)id] != null)
            delete(zoznam_mask[(int)id]);
}


 [ Príspevkov: 2 ] 


Neznáma chyba. prosím o korektúru [c++]



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Chyba 101 (net::ERR_CONNECTION_RESET): Neznáma chyba.

v Sieťové programy

0

3036

26.02.2011 11:36

000kiko000

V tomto fóre nie sú ďalšie neprečítané témy.

neznama chyba

v Backend

2

565

29.11.2007 20:37

tatysp

V tomto fóre nie sú ďalšie neprečítané témy.

neznama chyba

v Ostatné

14

422

16.02.2024 12:59

pcamater

V tomto fóre nie sú ďalšie neprečítané témy.

Neznáma chyba

v Frontend

3

499

30.07.2012 19:53

Alastor

V tomto fóre nie sú ďalšie neprečítané témy.

avast- neznama chyba

v Antivírusy a ochrana

2

645

06.09.2007 17:10

Marx911

V tomto fóre nie sú ďalšie neprečítané témy.

Validácia stránky, neznáma chyba

v Frontend

18

1107

05.01.2010 18:17

Unlink

V tomto fóre nie sú ďalšie neprečítané témy.

Neznáma chyba GOOGLE EARTH

v Ostatné programy

0

449

15.03.2017 12:37

DavidB

V tomto fóre nie sú ďalšie neprečítané témy.

neznáma chyba v poli

v Backend

7

620

14.05.2010 15:09

1daemon1

V tomto fóre nie sú ďalšie neprečítané témy.

externe DTD - neznama chyba

v Frontend

3

741

23.05.2007 17:35

imcold

V tomto fóre nie sú ďalšie neprečítané témy.

BIND & NAMED - neznáma chyba ??

v Unix-like systémy

3

625

08.12.2009 21:36

Filipyno

V tomto fóre nie sú ďalšie neprečítané témy.

Slovanet - pomalý net - neznáma chyba

v Internet, služby a sociálne siete

7

967

30.06.2015 8:40

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

C - GetConsoleWndHandle Chyba

v Backend

4

336

05.03.2014 8:58

Xperience

V tomto fóre nie sú ďalšie neprečítané témy.

stop c 0000221 chyba

v Windows

5

371

19.11.2016 21:02

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

chyba - MS Visual C++

v Antivírusy a ochrana

6

848

13.10.2009 20:42

citizen

V tomto fóre nie sú ďalšie neprečítané témy.

C - chyba v syntaxe

v Backend

18

1155

17.12.2008 19:57

gnk

V tomto fóre nie sú ďalšie neprečítané témy.

MS Visual C++ 2008 - chyba

v Backend

2

615

01.03.2010 20:17

Megi



© 2005 - 2026 PCforum, edited by JanoF