• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

rzutowanie zmiennych na int

Object Storage Arubacloud
0 głosów
526 wizyt
pytanie zadane 29 lipca 2021 w C i C++ przez Stasiu Nowicjusz (190 p.)

dot: problemów z uruchomieniem programu 01.cpp kursu „Programowanie w C++ odcinek 10.Wskaźniki .Dynamiczne alokowanie pamięci”

Z załączonych przez Pana Mirosława Zelenta 4 plików do ww. odcinka , kody: 02.cpp, 03.cpp, 04.cpp działają poprawnie, natomiast kodu 01.cpp nie mogę uruchomić (screen ekranu 01.cpp_próba uruchomienia w załączeniu). Autorowi kursu na wideo You Tube kod 01.cpp działał poprawnie i po zakończeniu wysyłał komunikat „Process returned – 0 (0x0)” . Natomiast u mnie program zaczyna działać dopiero po usunięciu z wiersza 19 kodu polecenia wykonania rzutowania zmiennych (int) ale kompilator wysyła komunikat „Process returned – 1073740940 (0xC0000374)” - w załączeniu screen ekranu 01.cpp_uruchamiany bez _(int)_

Czy ktoś może mi wytłumaczyć gdzie leży i na czym problem oraz jak go usunąć ?

Będę wdzięczny za każdą próbę pomocy.

2
komentarz 29 lipca 2021 przez Tomasz Sobczak Bywalec (2,830 p.)
edycja 29 lipca 2021 przez Tomasz Sobczak
Nie wysyłaj zdjęcia lub screena tekstu, to zła praktyka.  Zamiast obrazów prześlij tekst. Tutaj w sekcji formatowania tekstu jest opcja „code”. Użyj opcji code do przesłania kodu. Screenshot  jest nieczytelny.

2 odpowiedzi

+1 głos
odpowiedź 29 lipca 2021 przez Stasiu Nowicjusz (190 p.)
#include <iostream>

using namespace std;

int ile;

int main()
{
    cout << "Ile liczb w tablicy: ";
    cin>>ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    //pokaz kolejne adresy komorek w tablicy
    for (int i=0; i<ile; i++)
    {
        cout<<(int)tablica<<endl;
        tablica++;
    }

    delete [] tablica;
    tablica=NULL;


    return 0;
}

To jest kod 01.cpp który u mnie nie działa, a  działał na prezentacji wideo odc. 10 kursu (zaznaczam że pozostałe 3 kody załączone przez autora kursu działają poprawnie).

U mnie ten program daje się uruchomić dopiero po usunięciu polecenia rzutowania zmiennej (int), ale sądząc po treści komunikatu działa nieprawidłowo.

 

komentarz 29 lipca 2021 przez Oscar Nałogowiec (29,290 p.)

Rzutowanie nic nie zmienia, program jest błędny, powód wyjaśniłem wcześniej. W programowaniu jest czasem tak, że błędny program pozornie działa, a przy jakiś okolicznościach się wykłada.

Jak już konkretnie chcesz wypisywać te adresy to zamiast:

        cout<<(int)tablica<<endl;
        tablica++;

 

daj:

        cout<<(int)(tablica+i)<<endl;

Na jedno wyjdzie, a zmienna tablica nie będzie modyfikowana.

 

komentarz 30 lipca 2021 przez Stasiu Nowicjusz (190 p.)
Proponowana  zmiana nic nie dała, programu nadal nie można uruchomić, kompilator przesyła następującą wiadomość :

||=== Build: Debug in 30.07.2021 (compiler: GNU GCC Compiler) ===|
C:\Users\ba_st\OneDrive\Pulpit\CodeBlocks\30.07.2021\main.cpp||In function 'int main()':|
C:\Users\ba_st\OneDrive\Pulpit\CodeBlocks\30.07.2021\main.cpp|19|error: cast from 'int*' to 'int' loses precision [-fpermissive]|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
komentarz 30 lipca 2021 przez tkz Nałogowiec (42,000 p.)
#include <iostream>
 
using namespace std;
 
int ile;
 
int main()
{
    cout << "Ile liczb w tablicy: ";
    cin>>ile;
 
    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];
 
    //pokaz kolejne adresy komorek w tablicy
    for (int i=0; i<ile; i++)
    {
        std::cout<<(tablica+i);
        //std::cout<<*(tablica+i); jezeli bedziesz chcial wypisac zawartosc
    }
 
    delete [] tablica;
    tablica=NULL;
 
 
    return 0;
}

 

komentarz 2 sierpnia 2021 przez Stasiu Nowicjusz (190 p.)

Ok. dziękuję.

Chodziło mi jednak o dwa problemy związane z tym tematem które opisałem wcześniej:

1. jak wyświetlić adresy tych komórek tej tablicy ale w  systemie dziesiętnym (problem z rzutowaniem poprzez (int))

2. dlaczego jak usunę z kodu polecenie (int) program wypisuje wprawdzie adresy komórek w systemie szesnastkowym ale podaje komunikat: „Process returned – 1073740940 (0xC0000374)" a nie jak zazwyczaj „Process returned – 0 (0x0)”.

Poza tym trwa to dłużej niż zwykle i pojawia się kursor jakby komputer wykonywał jakieś dodatkowe czynności

komentarz 2 sierpnia 2021 przez Oscar Nałogowiec (29,290 p.)
Rzutuj na long. Dostałeś błąd, że rzutowanie na int powoduje utratę danych. Long powinien "zmieścić" pointer
0 głosów
odpowiedź 29 lipca 2021 przez Oscar Nałogowiec (29,290 p.)

Argumentem operatora delete musi być dokładnie ta sama wartość, która została zwrócona przez new. W twoim kodzie pomiędzy new i delete wiele razy wykonujesz ++ na zmiennej, która (jako jedyna) przechowuje tą wartość.

Całkiem niedawno był poruszony analogiczny problem...

Podobne pytania

0 głosów
2 odpowiedzi 723 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 241 wizyt
0 głosów
1 odpowiedź 724 wizyt
pytanie zadane 16 marca 2018 w C i C++ przez Ditrix Mądrala (5,650 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...