Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: hzre en 10 Noviembre 2020, 04:15 am



Título: Marca error en sintaxis
Publicado por: hzre en 10 Noviembre 2020, 04:15 am
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<string.h>
  4. int main(){
  5. int *p1;
  6. p1=malloc(sizeof(int));
  7. if(p1==NULL){
  8. printf("Memoria Llena \n");
  9. }else{
  10. printf("Hay Espacio \n");
  11. *p1=15;
  12. printf("\n\n%i",*p1);
  13. }
  14. free(p1);
  15. printf("\n\n%i\n",*p1);
  16. return 0;
  17. }


MOD: Etiquetas de Código GeSHi insertadas


Título: Re: Marca error en sintaxis
Publicado por: K-YreX en 10 Noviembre 2020, 09:34 am
El error como tal está en las cabeceras.
Estás incluyendo dos veces <string.h> cuando no la usas para nada y no estás incluyendo <stdlib.h> que es la que contiene las funciones malloc() y free().

Supongo que es un programa de prueba porque digamos que no sirve de mucho imprimir el valor de un puntero cuando ya lo has liberado.

Además es aconsejable castear el valor de retorno de malloc() ya que es <void*>:
Código
  1. int *p = (int*)malloc(sizeof(int));

Y en el caso de que no haya espacio para reservar el puntero, el trozo del if-else funcionará bien pero al llegar a la línea 14, intentarás liberar una memoria que no está reservada... -> Error.