string + malloc = problem?
Ostatnio zmodyfikowano 2012-11-07 23:20
cytrynka Temat założony przez niniejszego użytkownika |
string + malloc = problem? » 2012-11-07 21:45:05 Napisałam taki kod (poniżej). Jest to początkowy etap tworzenia sklepu obuwniczego. W zadaniu które mam wszystko ma być zrobione tak jak w moim kodzie, a co najważniejsze tablica dynamiczna ma być utworzona przez "malloc", nie przez "new"(takie polecenie od nauczyciela). I tu pojawia mi się problem. Typ string, że tak powiem "gryzie" się z mallociem. Przy zamianie tablicy na "new" wszystko gra, jedynie przy mallocu niby się kompiluje, a przy uruchomieniu się sypie. Zamiast string użyłam też char, ale kompilator zwraca błędy. Co mogę zrobić, aby to dobrze działało? Proszę o jakieś wsparcie. #include <iostream> #include <string>
using namespace std;
struct Buty { string typ; string kolor; int rozmiar; int cena; };
Buty ** tworz( int n ) { Buty ** spis =( Buty ** ) malloc( n * sizeof( Buty * ) ); for( int i = 0; i < n; i++ ) spis[ i ] =( Buty * ) malloc( sizeof( Buty ) ); return spis; }
void edycja( Buty * buty, string typ, string kolor, int rozmiar, int cena ) { buty->typ = typ; buty->kolor = kolor; buty->rozmiar = rozmiar; buty->cena = cena; }
void wypisz( Buty ** spis, int n ) { for( int i = 0; i < n; i++ ) cout << spis[ i ]->typ << ": " << spis[ i ]->kolor << " [" << spis[ i ]->rozmiar << "] " << spis[ i ]->cena << "zl" << endl; }
void usun( Buty ** spis, int n ) { for( int i = 0; i < n; i++ ) free( spis[ i ] ); free( spis ); }
void main() { Buty buty; Buty ** spis = tworz( 2 ); edycja( spis[ 0 ], "kozaki", "czerwone", 32, 200 ); edycja( spis[ 1 ], "sandaly", "czarne", 32, 200 ); wypisz( spis, 2 ); usun( spis, 2 ); }
|
|
Mrovqa |
» 2012-11-07 21:46:55 Ujmij kod w tagi [cpp][/cpp] Buty ** spis = new Buty *[ n ]; for( int i = 0; i < n; i++ ) { spis = new Buty; } return spis; }
|
|
akwes |
» 2012-11-07 21:49:40 #include <iostream> #include <string>
Widzę nagłówki typowo C++ a próbujesz używać funkcji rodem z C :) Operator new robi to lepiej. |
|
DejaVu |
» 2012-11-07 21:52:12 malloc = alokacja pamięci new = alokacja pamięci + wywołanie konstruktora string = obiekt obiekt = konieczność wywołania konstruktora malloc + string = konieczność ręcznego wywołania konstruktora
|
|
cytrynka Temat założony przez niniejszego użytkownika |
. » 2012-11-07 22:37:46 Ręczne wywołanie konstruktora? Możesz powiedzieć dokładniej jak to ma wyglądać? Nie słyszałam jeszcze o czymś takim, pierwszy raz spotykam się z takim problemem.
|
|
DejaVu |
» 2012-11-07 23:20:08 @up: to alokuj obiekty za pomocą operatora new i problemu nie będzie. |
|
« 1 » |