Gli array rappresentano blocchi contigui di memoria. Poiché il nome dell'array è fondamentalmente un puntatore al primo elemento, è possibile utilizzare la notazione dell'array per accedere al resto del blocco. Ricorda però, non ci sono errori nel controllo di C sui limiti dell'array, quindi se ti allontani dalla fine del blocco di memoria, puoi fare tutto ciò che non hai inteso e più che probabile finirà con una sorta di errore di memoria o errore di segmentazione. Dal momento che l'int può essere di dimensioni variabili, vorrei utilizzare questo codice invece:
int *start;
int i;
start = malloc(40 * sizeof(int));
for (i = 0; i < 40; i++)
{
start[i] = 0;
}
Qualcosa del genere funzionerà bene. Il modo in cui lo stai facendo, almeno dal codice che hai postato, non c'è modo di fermare il ciclo perché una volta superato il blocco di memoria, continuerà fino a quando non verrà eseguito un NULL o si verificherà un errore di memoria. In altre parole, il ciclo uscirà solo se viene eseguito un valore nullo. Quella null può essere all'interno del blocco di memoria che hai assegnato, o potrebbe essere ben oltre il blocco.
EDIT: Una cosa che ho notato del mio codice.Alloca lo spazio per 40 pollici che possono essere 4 byte, 8 byte o qualcos'altro a seconda dell'architettura della macchina su cui si sta lavorando. Se si vuole veramente solo 40 byte di numeri interi, quindi fare qualcosa di simile:
int *start;
int i;
int size;
size = 40/sizeof(int);
start = malloc(size);
for (i = 0; i < size; i++)
{
start[i] = 0;
}
Oppure si può utilizzare un tipo di dati char o un unsigned char se è necessario. Un'altra cosa che ho notato. La funzione malloc restituisce un tipo di puntatore vuoto che è compatibile con tutti i puntatori, quindi non è necessario eseguire un typecast su un malloc.
fonte
2015-04-28 02:27:44
Non vedo il motivo per cui non ho votato la domanda, ci sono input e sforzi ragionevoli per mostrare cosa l'OP vuole fare. Cosa è successo a SO ultimamente – fayyazkl
Non riesco a ricordare la logica, ma lo cerco su SO. Non si dovrebbe mai trasmettere il risultato restituito da malloc. Rimuovere il (int *) dalla riga start = ... malloc ...; – rhubarbdog
Deve essere insegnato piuttosto che ridimensionato silenziosamente. Il motivo è disponibile in dettaglio in altre domande su SO, ma è possibile che il valore di ritorno di cast di malloc POSSIBILMENTE nasconda/manometta un'allocazione fallita. Si noti che questo è specifico per C. In C++, è un requisito per farlo. – fayyazkl