elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Temas
Páginas: [1] 2
1  Programación / Programación C/C++ / Liberar memoria asignada a una estructura en: 24 Mayo 2014, 19:32 pm
Imaginemos que tenemos una estructura tal que:
Código
  1. struct estructura{
  2. // miembros
  3. };
  4.  
  5. struct estructura *variable;

y ahora
Código
  1. variable = malloc(5 * sizeof(*variable));

Quería saber si liberar la memoria así:
Código
  1. for(i = 0; i < 5; i++){
  2. free( (variable + i) );
  3. (variable + i) = NULL;
  4. }

es correcto.

Un saludo.
2  Programación / Programación C/C++ / Duda archivos en C (solucionado) en: 19 Mayo 2014, 11:07 am
Hola de nuevo. Resulta que estoy haciendo un programa que involucra archivos y hay un segmento en el que me resulta útil saber la línea más larga del archivo.

Para ello tengo este código:
Código
  1. int main(void)
  2. {
  3. int N;
  4. // codigo
  5. FILE *archivo;
  6. archivo = fopen(nombreArchivo.txt, "r");
  7. N = mayorLinea(archivo);
  8. // codigo
  9. fclose(archivo);
  10.  
  11. return EXIT_SUCCESS;
  12. }
  13.  
  14. int mayorLinea(FILE *arch)
  15. {
  16. char c;
  17. int contador = 0;
  18. int aux = 0;
  19.  
  20. while(c != EOF){
  21. c = fgetc(arch);
  22.  
  23. if(c != '\n' && c != EOF){
  24. contador++;
  25. }
  26. else{
  27. if(contador > aux){
  28. aux = contador;
  29. }
  30. contador == 0;
  31. }
  32. }
  33.  
  34. return aux;
  35. }
  36.  
La duda es que si imprimo N en el main() me sale siempre 0. Me parece que la forma en la que llamo a la función es errónea, pero no encuentro tal error.
Un saludo y gracias
3  Programación / Programación C/C++ / Ayuda programación C [agilizar programa] en: 12 Mayo 2014, 15:55 pm
Hola. La cuestión es que tengo un programa en el que hay una serie de funciones que son llamadas bastantes veces durante la ejecución de este(más de 20 cada una).
Lo que quería saber es si existe algún método para mejorar la velocidad del programa cuando se hacen muchas llamadas a una función.

Un saludo.
4  Programación / Programación C/C++ / A que equivale... en: 8 Mayo 2014, 21:35 pm
Al igual que en un puntero a puntero para acceder a casa uno de los elementos se puede usar:
Código:
nombre[x][y]
Tanto como
Código:
*(*(nombre + y) + x)

Si tengo por ejemplo un puntero a una estructura  tal que
Código:
struct estructura *nombre;
nombre = malloc(n * sizeof(*nombre));
Y un miembro de esa estructura es por ejemplo
Código:
char **cadena;

Para acceder a un elemento j de ese miembro en una estructura i uso
Código:
(jugador + i) -> cadena[j];

Mi pregunta es, ¿Cómo represento lo anterior como notación completa de punteros? Es decir sin usar los corchetes que uso en cadena[j] como en
Código:
*(*(nombre + y) + x)

Un saludo
5  Programación / Programación C/C++ / Acceder a los caracteres de un array de punteros en: 6 Mayo 2014, 11:16 am
Por ejemplo si tengo:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main(void)
  5. {
  6. char **nombre;
  7. nombre = (char **)malloc(10 * sizeof(char *));
  8. nombre[0] = (char *)malloc(10 * sizeof(char));
  9. gets(nombre[0]);   // ya se que no se debe usar
  10.  
  11. return EXIT_SUCCESS;
  12. }
Pongamos ahora que introduzco por teclado "HOLA", ¿cómo hago para acceder por ejemplo a la 'H' o a cualquier otro caracter de nombre[0]

Un saludo
6  Programación / Programación C/C++ / Me da error y no sé porqué en: 4 Mayo 2014, 19:59 pm
Este es el código:
Código
  1. #include<stdio.h>
  2.  
  3. void situarPosiciones(int *posicion);
  4.  
  5. int main(void)
  6. {
  7.  
  8. static int situarPosiciones[5] = {0,1,2,3,4};
  9.  
  10.  
  11. funcion(situarPosiciones);
  12.  
  13.  
  14. return 0;
  15. }
  16.  
  17. void situarPosiciones(int *posicion)
  18. {
  19. int i;
  20.  
  21. for(i = 0; i < 5; i++){
  22. if(*(posicion + i) != 0){
  23. *(posicion + i)--;
  24. }
  25. else{
  26. *(posicion + i) = 4;
  27. }
  28. }
  29.  
  30. return;
  31. }

Lo que pretende es que cada vez que llame a la función me salga algo como:
|0|1|2|3|4| 1º llamada
|4|0|1|2|3| 2º llamada
|3|4|0|1|2| 3º llamada
--------------------------

Pero no sé que puede estar fallando

Un saludo
7  Programación / Programación C/C++ / Duda sentencia return en C en: 1 Mayo 2014, 21:09 pm
Hola, supongo que les sonará muy básico, pero no sé que hace el poner return en una sentencia como un if (por ejemplo):

Es decir, he visto códigos que ponen cosa como:
Código:
if (...){
   return ... ;
}

Mi duda principal es, ¿a dónde devuelven el valor? (suponiendo claro que esté fuera de cualquier función distinta de main. También lo he visto en sentencias globales a cualquier función)

Un saludo
8  Programación / Programación C/C++ / Duda con estructuras C en: 30 Abril 2014, 13:24 pm
Si por ejemplo tengo la siguiente estructura de datos:

Código:
struct nombre{
   // código
};

struct nombre array[N];   // siendo N un entero cualquiera

Esto lo entiendo; creo un array que contiene N estructuras.

Ahora lo que quiero es hacer lo equivalente a lo anterior pero con un puntero.
Yo he intentado esto, pero seguro que es erróneo:

Código:
struct nombre{
   // código
};

struct nombre *puntero;
puntero = (struct nombre*)malloc(N * sizeof(nombre));

Espero que me puedan ayudar. Un saludo.
9  Informática / Electrónica / Cargador se quemó (creo) en: 27 Abril 2014, 18:07 pm
Estaba el otro día programando cuando de repente oigo un pequeño chispazo proveniente de mi cargador de portátil. En ese momento se fue la luz. Despues, tras volver a poner los fusibles bien miré y comprobé que no cargaba el portátil.
Quería saber si podía haber dañado mi portátil. Aparentemente funciona, pero quiero descartar cualquier tipo de daño. Como dato el cargador es el que venía con el portátil.

Un saludo.
10  Programación / Programación C/C++ / Ejercicio compila pero no se ejecuta en: 10 Abril 2014, 08:30 am
Muy buenas de nuevo. Estoy haciendo un programa ( muy básico ) en el que se debe introducir un número de alumnos, luego pedir una calificación a cada uno en el intervalo [0, 10], y por último clasificar el número de aprobados, notables, etc. TODO CON ENTEROS.
De momento llevo lo siguiente:

Código:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

#define TAMANIO 10

int verificarEntrada(const char *ptrX);

int verificarEntrada(const char *ptrX)
{
for(; *ptrX != '\0'; ptrX++){
if(isdigit(*ptrX) == 0){
puts("->Entrada no permitida.");
return 0;
}
}

return 1;
}

int main(void)
{
char nAlumnos[TAMANIO];
int alumnos;
int longitud;
int x;   // valor que devuelve la función verificarEntrada()
int i;
char *notas[alumnos];
int notasEnteras[alumnos];


do{
printf("Numero de alumnos: ");

fgets(nAlumnos, TAMANIO, stdin);   // si introducimos 9 o más caracteres se produce OVERFLOW en el buffer

longitud = strlen(nAlumnos);

if(nAlumnos[longitud-1] == '\n'){   // si la cadena tiene una longitud menor a TAMANIO-1 evitamos la "impresión de '\n'
nAlumnos[longitud-1] = '\0';
}

x = verificarEntrada(nAlumnos);

puts("");

if(x == 1){
alumnos = atoi(nAlumnos);
}

} while(x == 0);

for (i = 0; i < alumnos; i++){
do{
notas[i] = malloc (TAMANIO * sizeof (char));
 
       printf("Nota alumno %d : ", i + 1);
       scanf("%[^\n]", notas[i]);
       while(getchar() != '\n');
      
       x = verificarEntrada(notas[i]);

if(x == 1){
int n = atoi(notas[i]);

if(n < 0 || n > 10){   // cada nota debe estar comprendida en el intervalor [0, 10]
x = 0;
}
else{
notasEnteras[i] = atoi(notas[i]);
}
}

} while(x == 0);
   }


return EXIT_SUCCESS;
}

El problema es que compila pero en cuanto se abre la consola se termina el proceso.
No encuentro que puede estar mal.
Agradecería mucho indicaciones de cómo mejorar un poco el código (ya que lo veo un poco desastroso, sobre todo en la declaración de variables  ;D )

Gracias.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines