[C++] RpcRaiseException mnie dobija (Segmentation Fault)

0

Witam Was serdecznie..
Wiele razy mi pomagaliscie moge tym razem ktos bedzie wiedzial o co chodzi....
napisalem programik i mimo ze jest dobrze napisany (Pod linuxem kompiluje sie piknie i piknie dziala) to pod windowsem dostaje Segmentation Fault (GDB wskazuje na RpcRaiseException Dziwne bo ja nie linkuje rpc.h ani nie includuje...

a oto programik (oczywiscie jest tam duzo rzeczy a to wycinek):

....
...
int main(void) {
  try {
  //....
    {
       int t = GetCurrentRound();
       while (GetCurrentRound() == t) {
            //........
       };
    }
  //...
  } catch (ErrorClass &Blad) {
       //...
  }
  return 0;
}

Specjalnie robie int t w bloczku by pozniej nie zasmiecala pamieci i mam blad...

a jak usune te { } czyli nie zrobie bloku wewnetrznego to nie ma bledu...

Program kompiluje pod CygWinem (bo windows nie ma odpowiednika funkcji poll() )

co jeszcze.. aha w innym miejscu programu bylo podobnie tylko ze
byl taki kod:

char *wsk = new [Gracze.Ilosc()];
if (!wsk)
    throw ErrorClass("Blad przydzialu pamieci");
//... (2 linijki bodajrze cout<< lub atoi() cos takiego nie pamietam

delete [] wsk;

i GDB pokazywalo "Normal Program Exit" a konsolka pokazywala "Aborting (Core dumped)" a jak zamienilem na sztywna tablice

char wsk[256];

to juz nie ma bledu..

Bardzo prosze o pomoc bo [???] i juz mi szajba odbija bo nie moge rozwijac programu a zalezy mi na tym by programik chodzil tu i tu..

Chyba ze macie odpowiedniki pod windowsem funkcji:
poll() <- Cos jak select tylko ze latwiejsze wg mnie
(sprawdza czy do danego deskryptora mozna pisac lub czy przyszly dane)
( przy komunikacji program mi sienie zawiesz na recvfrom() )

fcntl() <- chodzi o to by danemu Socket Deskryptorze dodac flage NON_BLOCK (przy komunikacji UDP ta opcja jest mi potrzebna (funkcja poll() inaczej zle dziala)

0

Specjalnie robie int t w bloczku by pozniej nie zasmiecala pamieci i mam blad...

Nie przesadzasz z tą oszczędnością??? :> Z resztą to, że zmienna

t

jest w bloczku nie znaczy, że program po wyjściu z niego zwolni 4 bajty pamięci - jedynie przesunie się wskaźnik stosu.

char *wsk = new [Gracze.Ilosc()];

A nie powinno być tak?:

char *wsk = new char[Gracze.Ilosc()];
0

tak tak.. moj blad przy pisaniu w programie oczywiscie wszystko ok...

Mam tez takie pytanie czy znasz odpowiednik fynkcji poll() pod windowsa? tzn uzywam funkcji poll() do sprawdzania czy w danym deskryptorze pojawily sie dane (u mnie deskryptor gniazda TCP lub UDP).
Poll() jest takze zamieniaja przez funkcje select() ale wg mnie poll() jest prostrze.. Moze jest cos z WinAPI ?Bardzo prosze o pomoc..

1 użytkowników online, w tym zalogowanych: 0, gości: 1