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

Dziwny wynik podzczas przypisania tablicy.

Hosting forpsi easy 1 pln
0 głosów
164 wizyt
pytanie zadane 12 grudnia 2016 w C i C++ przez Miszo Bywalec (2,100 p.)
edycja 12 grudnia 2016 przez Miszo
#include <iostream>
#include <time.h>
#include <string>

#define BL cout<<endl;

using namespace std;

struct text {

    int rozmiar = 100;
    char *wsk = new char[rozmiar];




};

void zapisz(text&);



int main()
{

    text tekst;

    zapisz(tekst);
    
        cout << tekst.wsk;

    

    
    return 0;
}


void zapisz(text &tekst) {

    char napis[20];
    cout << "Podaj tekst: ";
    cin >> napis;
    

    tekst.wsk = napis;



}


2 odpowiedzi

+1 głos
odpowiedź 12 grudnia 2016 przez Harb Początkujący (440 p.)

Żeby nie było żadnych wycieków pamięci i chcesz żeby pamięć tablicy była przydzielana dynamicznie zastosuj odpowiedni konstruktor który przydzieli pamięć i przypiszę do niej wartość, użycie operatora new w konstruktorze wymaga odpowiedniego destruktora z operatorem delete. Do zmieniania wartości tablicy możesz zdefiniować funkcje wewnątrz structa. Przecież jest on traktowany jako klasa z publicznym dostępem do pól i metod składowych. Przedmówca wytłumaczył już czemu wychodzą takie dziwne znaki, przez co nie muszę tego tłumaczyć. 

O to przykład jak można skonstruować taką struktura z dynamiczna tablica.

#include<iostream>
#include<cstring>

struct Text{
    char* wsk;
    Text(const char* tekst)
    {
        wsk = new char[strlen(tekst)+1];
        strcpy(wsk,tekst);
    }
    ~Text()
    {
        delete[] wsk;
    }


};

int main()
{
    Text tekst("TEKST KTORY CHCE ZAPISAC");
    std::cout << tekst.wsk;
    return 0;
}


 

komentarz 13 grudnia 2016 przez Miszo Bywalec (2,100 p.)
Z tego co widzę, to tekst jest wskaźnikiem w tym konstruktorze, skoro tak, to w jaki sposób string "TEKST KTORY CHCE ZAPISAC" możemy wpisać do wskaźnika?
komentarz 15 grudnia 2016 przez Harb Początkujący (440 p.)
Funkcja strcpy :)
0 głosów
odpowiedź 12 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
Ten kod nie powinien się nawet skompilować.
komentarz 12 grudnia 2016 przez Miszo Bywalec (2,100 p.)
Poprawiłem, teraz się kompiluje. Tylko kompletnie nie wiem dlaczego to nie działa.
komentarz 12 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
1. Nie używaj makr

2. Masz wyciek pamięci

3. W funkcji zapisz do tekst.wsk przypisujesz adres tablicy, która przestaje istnieś w chwili wyjścia z funkcji. UB
komentarz 12 grudnia 2016 przez Miszo Bywalec (2,100 p.)
Tylko jak powinien wyglądać ten kod jeżeli chce tam ten napis co podalem przez cin dać do tej dynamicznej tablicy, a nie adres.

Podobne pytania

0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
0 głosów
3 odpowiedzi 115 wizyt
pytanie zadane 3 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
1 odpowiedź 99 wizyt
pytanie zadane 7 lutego 2021 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,130 zapytań

140,788 odpowiedzi

317,814 komentarzy

61,452 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1886p. - Łukasz Eckert
  2. 1856p. - Dawid128
  3. 1844p. - Marcin Putra
  4. 1844p. - CC PL
  5. 1775p. - Mikbac
  6. 1644p. - jaroslawroszyk
  7. 1633p. - rafalszastok
  8. 1562p. - rucin93
  9. 1553p. - sefirek
  10. 1492p. - Adrian Wieprzkowicz
  11. 1456p. - Eryk Andrzejewski
  12. 1424p. - ssynowiec
  13. 1383p. - Rafał Trójniak
  14. 1325p. - Michal Drewniak
  15. 1275p. - dia-Chann
Szczegóły i pełne wyniki

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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...