Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Assembler przy kompilowaniu - jak się go pozbyć?

Assembler przy kompilowaniu - jak się go pozbyć?

Scheduled Pinned Locked Moved Polish
8 Posts 3 Posters 3.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    olokotampus
    wrote on last edited by
    #1

    Wkurzająco często wywala mi jakiś syf w assemblerze zamiast uruchomić mój program (konsolowy, nieużywający Qt) - jak się tego pozbyć? Tracę zmysły już po np. 6 próbach uruchomienia kodu... >__<"

    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Rozumiem, że używasz Qt Creator? Assembler z reguły wchodzi do gry, gdy program się wykrzaczy (SIGSEGV, SIGABRT), a QtC nie może znaleźć kodu źródłowego do pokazania.

      Czyli polecam odpalić w trybie debugowania i sprawdzić, czy program działa poprawnie.

      (Z(:^

      1 Reply Last reply
      0
      • O Offline
        O Offline
        olokotampus
        wrote on last edited by
        #3

        Właśnie programy mi działają poprawnie, jeśli akurat nie wyskoczy assembler. On się pojawia losowo. Debugowania w ogóle nie mogę przeprowadzić, bo po kilku krokach wyskakuje assembler... >__<"

        1 Reply Last reply
        0
        • T Offline
          T Offline
          turaz
          wrote on last edited by
          #4

          serdzio ma rację, występuje jakiś błąd w programie.

          bq. 'Właśnie programy mi działają poprawnie, jeśli akurat nie wyskoczy assembler.

          Czyli jest jakiś błąd. Może jakbyś pokazał kod to udałoby się coś zauważyć.

          1 Reply Last reply
          0
          • O Offline
            O Offline
            olokotampus
            wrote on last edited by
            #5

            Dobra, jak tylko mi znowu coś wywali, to wam pokażę kod.

            1 Reply Last reply
            0
            • O Offline
              O Offline
              olokotampus
              wrote on last edited by
              #6

              No choćby taki kod, dwa razy wywaliło assemblera, a za trzecim poszło ładnie wszystko:

              @#include <iostream>

              using namespace std;

              int main()
              {
              int liczbaCyfr;
              cin >> liczbaCyfr;
              char liczba[liczbaCyfr];
              cin >> liczba;
              if (liczba[liczbaCyfr - 1] == 5)
              {
              char wynik[liczbaCyfr*2];
              int przesuniecie;
              int wskaznikPozycji;
              // licznik dekrementacji wskaznika pozycji - o ile dekrementowac wskaznik w stosunku do wartosci stalej (liczby cyfr)
              int licznikDekrWskPoz = 0;
              for (int i=liczbaCyfr-1 ; i>=0 ; i--)
              {
              przesuniecie = 0;
              wskaznikPozycji = (liczbaCyfr * 2) - 1 - licznikDekrWskPoz;
              for (int j=liczbaCyfr-1 ; j>=0 ; j--)
              {
              wynik[wskaznikPozycji] += (liczba[i]*liczba[j]) % 10 + przesuniecie;
              przesuniecie = (liczba[i]*liczba[j]) / 10;
              if (wynik[wskaznikPozycji] > 9)
              {
              przesuniecie += (wynik[wskaznikPozycji] / 10);
              wynik[wskaznikPozycji] -= (wynik[wskaznikPozycji] / 10) * 10;
              }
              wskaznikPozycji--;
              }
              // magiczna linijka z forum cpp0x - dzieki niej funkcja zaczela dzialac! O_o"
              if( przesuniecie > 0 )
              wynik[ wskaznikPozycji ] += przesuniecie;
              licznikDekrWskPoz++;
              }

              }
              if (liczba[liczbaCyfr - 1] == 6)
              {
              
              }
              if (liczba[liczbaCyfr - 1] != 5 && liczba[liczbaCyfr - 1] != 6)
              {
                  cout << liczbaCyfr - 1;
              }
              return 0;
              

              }
              @

              1 Reply Last reply
              0
              • sierdzioS Offline
                sierdzioS Offline
                sierdzio
                Moderators
                wrote on last edited by
                #7

                Włącz debugger, idź krok po kroku, sprawdź cały stack trace gdy się wysypie.

                Jedziesz na tablicach, w nich przekroczyć zakres jest uber prosto. Do tego nie inicjalizujesz zmiennych, co może prowadzić do nieprzewidzianych sytuacji.

                (Z(:^

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  turaz
                  wrote on last edited by
                  #8

                  Powiem szczerze, że jest tam kilka rzeczy, które wzbudzają moją wątpliwość. Na przykład : @if (liczba[liczbaCyfr - 1] == 5)@ czy nie powinno być: @if (liczba[liczbaCyfr - 1] == '5')@ Skoro @char liczba[liczbaCyfr]; @
                  Z tego co widzę to ten program ma działać na typach liczbowych, natomiast Ty nie działasz na integer'ach, double, long itp tylko na char.
                  Poza tym, tak jak sierdzio wspomniał na tablicach bardzo łatwo popełnić błąd w zakresach i indeksach oraz nie inicjalizujesz zmiennych.
                  Powstawiaj w kodzie np. std::cout do wyświetlenia w wartości zmiennych jakie wychodzą w Twoich działaniach, np. podczas liczenia przesunięcia lub do wyświetlenia aktualnej wartości w tablicy 'wynik'. Wydaje mi się, że wtedy zauważysz ideę problemu. Chyba, że źle rozumiem zasadę działania tego kodu.
                  Jeżeli się mylę to proszę o sprostowanie. :) Pozdrawiam.

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved