Neustálý pád programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Neustálý pád programu – C / C++ – Fórum – Programujte.comNeustálý pád programu – C / C++ – Fórum – Programujte.com

 

Kowalsky
~ Anonymní uživatel
13 příspěvků
12. 12. 2012   #1
-
0
-

Dobrý den, mám problém s částí mého kódu. 

void znak(int pridani)
{
   int a;
   int b;
   int c;
   if (pridani >= 0 && pridani<257)
      {
      for (a=0;a<256;a++)                //test zda jiz neni v retezci
          {
          if (pridani==znaky[a]) {return;}
          else if (pridani!=znaky[a]) {;}
          else {std::cout<< "Error 16";}    
          }
      for (b=0;b<256;b++)                   //hledani volnych mist
          {
          c=255-b;
          if (znaky[c]==0)
             {
             znaky[c]=pridani;std::cout<< "Znak uspesne pridan" <<std::endl;
             if (znaky[c]!=0) {return;}
             else {std::cout<< "Error 18";}
             }
          }
      }
   else {std::cout<< "Error 17"; return;}
}

a po něm nasleduje funkce ve které je:

for (int f=0;f<256;f++)
    {
    if (znaky[f]!=0)
            {
            g=znaky[f];
            pomoc[g]=znaky[f];
            if (pomoc[g]!=0) {znaky[f]=0;}
            else if (pomoc[g]==0) {f=0;std::cout<< "Error 27";}
            else {std::cout<< "Error 28";}
            }
     else if (znaky[f]==0) {}
     else {std::cout<< "Error 26";}
     for (i=0;i<256;i++)
         {
         if (pomoc[i]!=0)
         	{
         	znaky[i]=pomoc[i];
         	}
         }
         
     }

Ovšem jakmile dojde na druhou část kódu tak program spadne, ani mi to nenahlásí žádný error. Nehledě na fakt že jakmile dosazuji do funkce znak písmena a čísla tak jede v pohodě, ovšem jakmile do ní dosadím znaky s diakritikou, nějak mi je z pole vymaže (nemám ponětí jak), a jakmile první funkci vložím do cyklu aby se předali úplně všechny znaky ASCII tabulky tak cely program spadne během probíhání druhého kódu. Nevíte někdo čím to může být způsobeno? (pozn. pole znaky je globální proměnná.) Děkuji za rady..

Nahlásit jako SPAM
IP: 90.176.114.–
vitamin+8
Grafoman
12. 12. 2012   #2
-
0
-

ake rozmery maju polia: 'znaky' a 'pomoc' ?

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kowalsky
~ Anonymní uživatel
13 příspěvků
12. 12. 2012   #3
-
0
-

#2 vitamin
stejne....255

Nahlásit jako SPAM
IP: 90.176.114.–
crazy
~ Moderátor
+10
Grafoman
12. 12. 2012   #4
-
0
-

#3 Kowalsky
ale cykly ti probehnou 256x

Nahlásit jako SPAM
IP: 2001:718:7:204:802a:52fb:...–
All you need is vision and time.
Kowalsky
~ Anonymní uživatel
13 příspěvků
12. 12. 2012   #5
-
0
-

Cykly probehnou 256x ale také mám char[0] i char[255] ...nikde jinde s tim problem nemam, a i kdyz jsem to ted zkousel dat jen na f<255 a i<255 program opět spadl....

Nahlásit jako SPAM
IP: 90.176.114.–
crazy
~ Moderátor
+10
Grafoman
12. 12. 2012   #6
-
0
-

g=znaky[f];
pomoc[g]=znaky[f];

co když znak na pozici f má vyšší hodnotu než 255?

Nahlásit jako SPAM
IP: 147.32.79.–
All you need is vision and time.
Kowalsky
~ Anonymní uživatel
13 příspěvků
12. 12. 2012   #7
-
0
-

Jo už to vidím. Do pole se vkládali záporné hodnoty a tudíž g bylo záporné. Teď mě teda napadá otázka, proč se mi písmena a číslice ukládali v pohodě jako kladné číslo a diakritika se mi uložila jako záporné číslo?

znak(160); //á v ASCII mi jako hodnotu vrátilo -96


Je to bug nebo mám něco špatně?

Nahlásit jako SPAM
IP: 90.176.114.–
KIIV
~ Moderátor
+43
God of flame
12. 12. 2012   #8
-
0
-

signed char  ( == char ) ..  -128 .. 127

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kowalsky
~ Anonymní uživatel
13 příspěvků
12. 12. 2012   #9
-
0
-

Mohl bych poprosit trochu o rozvedeni? ;-) :) Ať aspoň vím na co si dat příště pozor? ;-)

Nahlásit jako SPAM
IP: 90.176.114.–
KIIV
~ Moderátor
+43
God of flame
12. 12. 2012   #10
-
0
-

char je defaultne se znamenkem - a je to 8bitu... pokud tam das 160 tak je to mimo rozsah a proste to pretece .. do zapornych cisel - nejvice platny bit je u unsigned cisla ohodnocen 128 a u signed je to znamenko

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Pad pri spustení programu — založil frostwyrm333

Pad programu pri Copy souboru — založil silent

Neustálý dotaz na DB — založil Lukas

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý