|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
[c - linux] riempire un array che cresce dinamicamente
Il mio obiettivo finale è quello di leggere un file di testo riga per riga e salvarlo in un array (dovrei dire matrice).
Per allenarmi con l'allocazione dinamica ho cominciato con un array monodimensionale di interi presi da stdin. Vado subito al codice che magari si capisce subito: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int *w,*v = NULL;
int i, j, count=0;
while(count < 10) {
if(count == 0) {
w = v;
}
scanf("%d",&i);
v = (int*) realloc(v, sizeof(int)*(count+1));
if (v!=NULL) {
*v=i;
}
else {
printf("errore allocazione\n");
}
count++;
}
for(j=0;j<8;j++) {
printf("%d\n", *(w+j));
}
free(v);
return 0;
}
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Fare la realloc di un vettore che non esiste non è mai una bella cosa
Poi fai *v = i...vai a sovrascrivere ogni volta il primo elemento del vettore, che senso ha ? La realloc il nuovo spazio te lo lascia in fondo. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Intanto grazie per la risposta.
Quote:
quindi dovrei fare Codice:
*(v+count) = i;
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non lo sapevo
Edit: o v[count] = i; Ultima modifica di cionci : 12-02-2010 alle 11:32. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Ho potuto provare il codice proprio ora, però va in segfault (e come non potrebbe essere?
ma se ho capito bene quello che mi dici, w non serve a niente? Io lo tenevo per salvarmi l'indirizzo di memoria di v all'istante iniziale per poi poter leggere l'array. [EDIT] ed inoltre, realloc, a differenza di malloc, alloca memoria contigua giusto?quindi sarebbe l'unico modo per accedere ad un array dinamico con l'aritmetica dei puntatori o con gl'indici?
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" Ultima modifica di Oceans11 : 12-02-2010 alle 11:42. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
w non serve a niente.
Quote:
http://www.cplusplus.com/reference/c...tdlib/realloc/ |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
anche in più chiamate? cioè se chiamo 3 volte una malloc mi alloca 3 blocchi di memoria tutti contigui?
...giusto quello che mi serviva. ps: ho eliminato w ed ora il programma và, anche se non capisco qual'era il problema
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" Ultima modifica di Oceans11 : 12-02-2010 alle 11:56. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
finalmente comincio ad avere una visione più chiara, grazie!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:15.




















