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

Dziwny wynik podzczas przypisania tablicy.

VPS Starter Arubacloud
0 głosów
257 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ź 260 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
0 głosów
3 odpowiedzi 142 wizyt
pytanie zadane 3 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 7 lutego 2021 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...