Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-03-2008, 18:27   #1
Boser
Member
 
Iscritto dal: Jan 2005
Città: Salerno
Messaggi: 108
[C++] "Address xxx out of bounds"

Salve a tutti,

ho un problemino a run-time (il compilatore in fase di compilazione non segnala errori) con questo codice:



#include <iostream.h>
#include <stdlib.h>




class Persona {
private:
char* nome;
char* cognome;



public:
Persona();
Persona(char* , char* );
void stampaPersona();


};


Persona::Persona() {

cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;


nome = NULL;

cout << "Non e' stato inizializzato l'attributo COGNOME, inseriscine uno: ";
cin >> cognome;
cout << endl;


}

Persona::Persona(char* name, char* surname) {

nome = name;
cognome = surname;

}


int main ()
{

Persona persona1;
Persona persona3;
Persona persona2("mario", "rossi");

return 0;
}



Dopo aver definito la classe Persona, procedo nel main con l'istanziazione di due oggetti di tale classe...Dopo aver compilato, provo a runnare...appena inserisco il nome di persona1 il programma va in segmentation fault e crasha.
Debuggando scopro che quando viene istanziato il primo oggetto persona1 e viene quindi chiamato il costruttore di default, il puntatore a char dell'attributo nome punta in una zona di memoria - 0x23f - taggata nel debugger con la dicitura "<Address 0x23f out of bounds>". Lo stesso NON succede per l'attributo puntatore a char cognome: infatti, se commento il pezzo



/*
cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;

*/


il programma fila liscio normalmente.
Inoltre, continuando ad eseguire le istruzioni nel main


Persona persona3;
Persona persona2("mario", "rossi");



il programma NON dà più alcun problema nè richiamando il costruttore di default nè chiamando il costruttore con parametri (nemmeno quando vado ad inizializzare l'attributo nome); quasi come se il problema si presentasse se e solo se l'oggetto istanziato è il primo in ordine temporale


Sapreste indicarmi una possibile soluzione?
Grazie mille!



p.s. uso dev-c++ versione 4.01 con debugger insight su win xp
__________________
Tiscali ADSL 20 Mega Flat
Router Thomson Speedtouch 585 (ST585)
Boser è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 18:43   #2
kernel::panic
Registered User
 
Iscritto dal: Feb 2008
Messaggi: 77
Quote:
Originariamente inviato da Boser Guarda i messaggi
class Persona {
private:
char* nome;
char* cognome;
....
};
Il problema è che tu dichiari due puntatori (tra l'altro non inizializzati...), per cui quando la cin cerca di scriverci dentro crasha, quando invece li fai puntare a "mario" e "rossi" tutto funziona.

Per risolvere ci sono 2 possibilità:

1) Dichiari 2 buffer sufficientemente grandi: char nome[200]; char cognome[200];

2) Oppure usi le stringhe di C++ std::string nome; std::string cognome; (queste classi si occupano di allocare e poi liberarare la memoria necessaria)

Ciao
kernel::panic è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 18:57   #3
Boser
Member
 
Iscritto dal: Jan 2005
Città: Salerno
Messaggi: 108
Quote:
Originariamente inviato da kernel::panic Guarda i messaggi
Il problema è che tu dichiari due puntatori (tra l'altro non inizializzati...), per cui quando la cin cerca di scriverci dentro crasha, quando invece li fai puntare a "mario" e "rossi" tutto funziona.

Per risolvere ci sono 2 possibilità:

1) Dichiari 2 buffer sufficientemente grandi: char nome[200]; char cognome[200];

2) Oppure usi le stringhe di C++ std::string nome; std::string cognome; (queste classi si occupano di allocare e poi liberarare la memoria necessaria)

Ciao
In effetti ho fatto un uso di puntatori abbastanza sconsiderato, soprattutto non inizializzandoli...ma a questo punto mi chiedo perchè questo pezzo di codice funzioni

#include <iostream.h>
#include <stdlib.h>

int main()
{

char* nome;

cin >> nome;

cout << nome;


system("PAUSE");
return 0;
}
__________________
Tiscali ADSL 20 Mega Flat
Router Thomson Speedtouch 585 (ST585)
Boser è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 19:05   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Può funzionare come può non funzionare, come può creare casini perché nome non essendo inizializzato conterrà chissà quale indirizzo dove tu poi vai a scriverci facendo la cin.
wingman87 è online   Rispondi citando il messaggio o parte di esso
Old 21-03-2008, 12:46   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Boser...usa il tag [ code] [ /code] per racchiudere il codice
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Denza Z9S: la berlina elettrica con il r...
Valve abilita i driver e il supporto all...
Terafab, il progetto di Musk finisce in ...
Il meglio di Amazon in 42 articoli: sono...
ECOVACS WINBOT W2 PRO OMNI a 349€: ecco ...
Samsung Gallery Cloud Sync introduce il ...
Dyson V8 Cyclone a 249€: scopa elettrica...
Rifiuti elettronici, l'altra faccia dell...
Meta prepara Luna, i nuovi occhiali smar...
SSD NVMe Gen4 2TB in offerta: Acer Preda...
Perché i backup non bastano pi&ug...
Maserati, si concretizza la pista cinese...
Corea del Sud preoccupata: le cinesi YMT...
Se ne vendono 3000 al mese su Amazon: Sm...
Sedie gaming ergonomiche su Amazon: SONG...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:57.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v