Sì, vedere che cosa si sta facendo, restituisce un puntatore a un oggetto (l'array chiamato board
) che è stato creato nello stack. L'array viene distrutto quando esce dall'ambito, quindi il puntatore non punta più a nessun oggetto valido (un puntatore pendente).
È necessario assicurarsi che l'array sia allocato nello heap, utilizzando new
. Il metodo santificato per creare una matrice allocata dinamicamente nel C++ moderno è quello di utilizzare qualcosa come la classe std::vector
, anche se è più complicato da quando si sta tentando di creare un array 2D.
char **createBoard()
{
char **board=new char*[16];
for (int i=0; i<16; i++)
{
board[i] = new char[10];
for (int j=0; j<10; j++)
board[i][j]=(char)201;
}
return board;
}
void freeBoard(char **board)
{
for (int i=0; i<16; i++)
delete [] board[i];
delete [] board;
}
fonte
2009-04-06 09:15:49
Puoi essere più specifico sull'errore? –
Si consiglia di utilizzare invece il carattere unsigned char, perché 201 non è compreso nell'intervallo di char. –
Inoltre, si sta restituendo l'indirizzo della variabile locale. Se si tenta di accedervi, il programma si bloccherà. – Naveen