Gracias por las respuestas.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
A a();
A *b=new A();
...
public static void main(String[] args) {
final Scanner sc=new Scanner(System.in);
Thread th1=new Thread(new Runnable(){
private Scanner sct=sc;
public void run(){
try {
String s="a";
while(! s.equals("")){
System.out.println("escribe: ");
s=sct.nextLine();
System.out.println(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
th1.start();
try {
System.out.println("duermo para dar tiempo al hilo hijo a hacer el"
+ "sc.nextLine()");
Thread.currentThread().sleep(2000);
//terminar ejecución del hilo B !!!¿¿¿Como?????¡¡¡¡
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//Antes:
//vuelvo a leer
ifs.getline(line, BUFFER_S,'\n');
//salvo la direcc. de memoria de dev
aux=dev;
//redimensiono dev
dev=new char*[i+2];
//le paso los datos que tenia hasta ahora
memcpy(dev,aux,sizeof(aux));
//le asigno la nueva linea
dev[i]=new char[BUFFER_S];
strcpy(dev[i],line);
//libero la memoria a la que apuntaba aux
delete[] aux;
//Después:
//vuelvo a leer
ifs.getline(line, BUFFER_S,'\n');
//salvo la direcc. de memoria de dev
aux=dev;
//redimensiono dev
dev=new char*[i+2];
//le paso los datos que tenia hasta ahora
for(int j=0;j<i;j++){
dev[j]=aux[j];
}
//le asigno la nueva linea
dev[i]=new char[BUFFER_S];
strcpy(dev[i],line);
//libero la memoria a la que apuntaba aux
delete[] aux;
Cita de: rir3760 en 22 Noviembre 2013, 18:29 PMSí, lo sé, de hecho en el código que he escrito lo hago explicitamente con una variable auxiliar y memcpy(), por eso no entiendo que pasa.
Cuando utilizas el operador new este reserva un bloque de memoria del tamaño apropiado, nada mas. El problema es que tu esperas que copie el contenido del bloque anterior y eso no lo hará el operador. Debes hacerlo manualmente reservando un nuevo bloque de memoria, copiando en el las direcciones de memoria y finalmente liberando el bloque original (y utilizando a partir de ese momento el nuevo bloque).
CitarCierto, pero esto no me lo permiten hacer usando la STL, tengo que manejar la memoria directamente. Además es algo que quiero entender como funciona.
Ya que el lenguaje es C++ es mejor utilizar un vector de objetos de tipo string para almacenar todas las lineas del archivo, con ello te liberas del manejo de memoria.