[ 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é a internetové programy

0

2823

26.02.2011 11:36

000kiko000

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

Neznáma chyba

v HTML, XHTML, XML, CSS

3

391

30.07.2012 19:53

Alastor

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

neznama chyba

v Ostatné

14

249

16.02.2024 12:59

pcamater

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

neznama chyba

v PHP, ASP

2

473

29.11.2007 20:37

tatysp

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

avast- neznama chyba

v Antivíry a antispywary

2

555

06.09.2007 17:10

Marx911

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

externe DTD - neznama chyba

v HTML, XHTML, XML, CSS

3

641

23.05.2007 17:35

imcold

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

neznáma chyba v poli

v PHP, ASP

7

531

14.05.2010 15:09

1daemon1

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

Neznáma chyba GOOGLE EARTH

v Ostatné programy

0

364

15.03.2017 12:37

DavidB

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

Validácia stránky, neznáma chyba

v HTML, XHTML, XML, CSS

18

988

05.01.2010 18:17

Unlink

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

BIND & NAMED - neznáma chyba ??

v Operačné systémy Unix a Linux

3

539

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 Poskytovatelia internetu

7

799

30.06.2015 8:40

shiro

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

C - GetConsoleWndHandle Chyba

v Assembler, C, C++, Pascal, Java

4

249

05.03.2014 8:58

Xperience

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

C - chyba v syntaxe

v Assembler, C, C++, Pascal, Java

18

1019

17.12.2008 19:57

gnk

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

stop c 0000221 chyba

v Operačné systémy Microsoft

5

267

19.11.2016 21:02

michalesku

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

chyba - MS Visual C++

v Antivíry a antispywary

6

742

13.10.2009 20:42

citizen

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

chyba Microsoft visual C++ 2008

v Ostatné programy

4

1066

19.11.2010 0:29

sync2



© 2005 - 2024 PCforum, edited by JanoF