Menú

Mostrar Mensajes

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ú

Mensajes - AlbertoBSD

#711
Uno es pre-incremento y el otro es pos-incremento.

El primero ++ptr hace el incremento y despues se guarda el valor resultante como parametro para printf

El segundo ptr++ primero guarda el valor como parametro de printf y luego realiza el incremento.

Saludos!
#712
Hay varias formas para hacer esto.

Hay que usar la ruta absoluta o la ruta relativa.

Esto es con ruta absoluta:

archivo = fopen("/usr/home/usuario/directorioX/archivo.txt","r");

O con ruta relativa (relativa al directorio actual de trabajo), suponiendo que estemos ya en el directorio usuario y asumiendo que el directorioX exita:
archivo = fopen("./directorioX/archivo.txt","r");

Saludos!
#713
Programación C/C++ / Re: Duda con realloc
6 Septiembre 2016, 17:34 PM
Si hay inconveniente ya que si por ejemplo en el realloc se mueve el bloque de memoria a otro lado, b va a seguir con el mismo apuntador.

Esto es

B apunta a 1000 (Direccion de memoria)
Se pide a reelloc que reasigne el espacio para agregar X cantidad adicional a la existente.
Realloc mueve el bloque que estaba en 1000 al bloque 2000 y retorna la nueva dirección de memoria
Si B no se iguala a lo que  devuelva realloc, entonces B seguira apuntado a 1000, si, ahi siguen tus valores anteriores, pero digamos que existe una variable C en la direccion 1003, entonces cuando tu escribas en tu apuntador B en esa posicion, estaras sobreescribiendo la variable C.

Ejemplo en video:

[youtube=640,360]https://www.youtube.com/watch?v=UbX5Qp9nrMk[/youtube]

Para ejemplo esta el siguiente codigo:

#include<stdlib.h>
#include<stdio.h>

int main() {
int i = 0;
int *B = NULL,*C = NULL;
B = realloc(B,sizeof(int));
C = realloc(C,sizeof(int));
C[0] = 1000;
printf("El valor de C[0] es %i\n",C[0]);
realloc(B,sizeof(int)*10); //NO SE ACTUALIZA B
while(i < 10) {
B[i] = 1337;
i++;
}
printf("El valor de C[0] es %i\n",C[0]);
}


Salida:


El valor de C[0] es 1000
El valor de C[0] es 1337


Como vemos, por lo menos en mi computadora el valor de C es sobreescrito y termina con Error de segmento, colgandose el programa.



Saludos!
#714
Programación C/C++ / Re: Duda con realloc
6 Septiembre 2016, 16:58 PM
 ¿Que es lo que ocurre si hago free ( b ); y continuo usando a?

al hacer free, el programa marca el segmento de memoria dado como libre y si lo sigues usando podria ser sobreescrito en cualquiero otro momento por otra variable de tu programa.

¿El valor de retorno de realloc apunta a la nueva dirección con los datos que contenía el primer argumento (en este caso a[0] debería ser 20 y tendría que tener espacio para un int más)?


Si el valore regresado es el nuevo, podria ser el mismo o no, sin embargo veo que estas asignando a la variable "a" pero sigues usando "b", en el caso de que te devuelva una direccion diferente, b ya no aputara mas a un rango de memoria "asignado". b continua con una copia vieje del apuntador.

Y en el caso del printf deberia de ser asi:

printf ("%p\n%p\n", a, b);


Por cierto asegurate de Inicializar la variable que le pasas por primera vez a realloc en NULL ya que es posible que contenga basura en la memoria y te marque segment fault
Tengo aqui un video que realice sobre el tema:
[youtube=640,360]https://www.youtube.com/watch?v=iBf7AThP1w8[/youtube]


Saludos!
#715
Es raro que te de ese error si es el mismo codigo que se uso no deberia de agregar ese enter de mas...

Sanitiza la entrada del nombre quitandole el \n o \r que quede atorado ahi:


char *busqueda = NULL;
fgets( nombre, 80, stdin );
busqueda = strstr(nombre,"\n");
*busqueda = '\0';
#716
Es procesador amd aparece diferente el VT Es de Intel para AMD aparece como SVM y ya lo tienes habilitado.

CitarEste documento tiene dos guías de configuración para dos diferentes plataformas de CPU:

Intel (Tecnología de virtualización de Intel, Intel VT-x)
AMD (Máquina virtual segura de AMD, AMD SVM)

Mira: https://www.qnap.com/es-es/qa/con_show.php?op=showone&cid=258

Ya todo depende de que el sotfware que estas usando sea compatible.

Saludos
#717
Programación C/C++ / Re: [C] La duda eterna
5 Septiembre 2016, 20:29 PM
Entonces deberías de cambiar el como trabajan esas funciones.

El detalle esta en que no se deberia de llamar a main. Tendrias que tener una función que inicialize el tablero y deje todas las variajes como si nunca si hubiera jugado.

Por ejemplo para reinicializar el tablero


int main(){
bool entrar = true;
char tateti[3][3];
do {

for(int i = 0; i < 3;i++){
for(int j = 0; j < 3;j++){
tateti[i][j] = '1' + (i*3) + j;
}
}
//Inicilizar TATETI, Rellenar la Matriz etc...

//JUGAR

//Evaluar si el usuario quiere salir
if(something == other) {
entrar = false;
}
}while(entrar);
}


Asi en cada do el tablero estaria inicializado como la primera vez.

Tendrías que realizar algo similar para las otras variables

Saludos!
#718
Hola acabo de validar el siguiente codigo y no funciona, YA QUE EL CMD de WINDOWS procesa algunas Teclas Especiales FX y no las pasa al programa en ejecucion.

#include<stdio.h>

int main() {
char x;
x = getchar();
switch(x){
case 0: //Teclas especiales... leer otra vez el valor
x = getchar();
printf("El valor de la tecla es %i",x);
break;
default: //Otras teclas.
break;
}
}


Posiblemente funcione con getch y en Turbo C o algun otro entorno de 16 bits (NETA!?!?!?!) pero en windows 10 no funciono.

Saludos!
#719
Programación C/C++ / Re: [C] La duda eterna
5 Septiembre 2016, 13:45 PM
Hola, no deberia de llamar a main.

Lo que se debe de realizar es un meter todo en un ciclo do-while y preguntar al usuario por continuar el juego o no.

int main(){
bool entrar = true;
do {
//Inicilizar TATETI, Rellenar la Matriz etc...

//JUGAR

//Evaluar si el usuario quiere salir
if(something == other) {
entrar = false;
}
}while(entrar);
}
#720
Dudas Generales / Re: Codigo C archivos
5 Septiembre 2016, 05:06 AM
Que errores te da?

El detalle que como dice tu esctrutura es de apuntadores si guardas esa estructura estaras guardanfo los apuntadores y no los datos apuntados.

Tendrias que guardar registros de longitud variable y guardar los datos de uno en uno