Bloque 7.2: Malloc y Realloc con Vector Dinamico

Поділитися
Вставка
  • Опубліковано 14 гру 2024

КОМЕНТАРІ • 79

  • @alejandrosauraseo
    @alejandrosauraseo 10 років тому +9

    En un par de días, me has resuelto dudas que ningún profesor me había dejado claras y por ello te doy las gracias. Eres muy bueno y procuraré seguirte en la medida de lo posible.
    Un saludo y gracias por compartir estos videotutoriales.

  • @AlejandroCosta1982
    @AlejandroCosta1982 5 років тому +11

    La verdad que seria un placer tenerlo como profesor.
    Con sus videos y sin interactividad con los visitantes, logra llegar a los puntos de ignorancia sobre el tema, que tenemos los que empezamos de cero.
    Con sólo ver una vez cada video, pude lograr a la primera crear vectores y matrices dinámicas.
    Con un nivel de complejidad alto para mi "NADA" de conocimientos.
    Los videos anteriores me parecieron fáciles.
    Se nota su experiencia con alumnos. Felicitaciones y gracias por compartir.
    Quiero aprender a programar PICs en C.
    Pero claro, primero tenía que aprender C y me topé con Ud. que se convirtió en uno mis profesores favoritos.
    Saludos desde Buenos Aires...

    • @atzayacatzintorres3888
      @atzayacatzintorres3888 4 роки тому

      Una pregunta, ¿para qué sirve el código que ya estaba? que habla de el por el min. 12:22.

    • @marktulsoto8685
      @marktulsoto8685 3 роки тому

      @@atzayacatzintorres3888 El metodo "aleatorio" solo llena el vector con numeros aleatorios que pueden ser entre 0 y 2.

    • @Mental_Vision
      @Mental_Vision Рік тому +1

      ya es tu profesor online en todo lo que sube a su canal jajaj

  • @miguelangelmartinezcasado8935
    @miguelangelmartinezcasado8935 7 років тому +7

    POR FIIIIIIIN ME HA SALIIIIIDOOOOOO. Por dios, he estado atascado, pensando que no entendia Malloc ni Realloc, pero NO, el problema era un error de escritura, casi me vuelvo loco. Por fin vuelvo a la carga a verme tus videos, esperate que en un par de meses, acabo este curso ;).
    Muchas gracias por tus videos y mucho apoyo!!!

  • @frankjobs7113
    @frankjobs7113 5 років тому +1

    Me tomó varias horas y tratar de resolver el problema, lo hice primeramente con vectores, me costo bastante establecer la logica y en una parte en la q me travé recoorte 5 papelitos para verlo de una forma mas visual. ahi comprendi cosas q se me pasaban en la codificacion. Una vez teniendo clara la forma de operar procedi a realizarlo con punteros. pondre las dos resoluciones un poco orgulloso del logro mas q por ponerlo. Devo decir q al hacerlo con punteros salto q el algoritmo no funcionaba bien y tuve q volver a pensarlo una vez resuelto porsegui con punteros, cuando termine de hacerlo y continué viendo el video observe q las formas en q resolvimos el problema fue la misma. lo cual resulto muy interesante.
    saludos emilio.
    //Con vectores --------------------------------------------------
    int main() {
    int N=20, i, j;
    int vector[N];
    aleatorio(vector,N);
    for (i=0; i

  • @sergionidhas
    @sergionidhas 5 років тому +63

    El warning es porque en la línea 15 te falto un puntero en el primer int osea tiene que ser
    vector = (int*)malloc(N*sizeof(int));
    ya lo tenias pero al explicar lo borraste, por cierto , gracias muy buen video

  • @flordurante3454
    @flordurante3454 Рік тому

    Excelentes tus tutoriales, super didácticos, gracias por compartirlos!

  • @germantoobe
    @germantoobe 3 роки тому

    Cuando borraste los punteros de ejemplo del primer int le borraste los dos en lugar de dejar uno; por eso debe ser el warning, genial el vídeo, saludos.

  • @RodrigoEsquivel22
    @RodrigoEsquivel22 10 років тому +2

    Estan muy buenos los videos, me sirvieron mucho para programación y algoritmos. Lo que no me quedo muy claro es el algoritmo que diseñaste para comparar los elementos del vector (al comienzo del video cuando reescribís un valor sobre otro). Muy buen aporte para los estudiantes. Saludos..

  • @OliverDanis-d7r
    @OliverDanis-d7r Рік тому

    Emilio tío esto es facilísimo, complícame la vida un poco.
    pd: gracias por estos vídeos, están bárbaros

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  Рік тому +1

      Cuando te pasas a Java y aprender la programación orientada a objetos veras el siguiente paso en la escala de complicación xD

  • @fedecereda
    @fedecereda 2 роки тому

    explicas muy bien, quizás un poco difíciles los ejemplos pero muy bueno el curso en general.

  • @kevinender5409
    @kevinender5409 8 років тому +1

    muy claro para los q tienen ciertos conocimientos previos..pero para comenzar a progrmamar ...mmmmm!!!!

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  8 років тому +8

      Este es el bloque 7.2, hay casi 40 videos previos, jejeje, esta pensado para enseñar solo que son el malloc y el realloc.
      Un saludo.

    • @G16Luis
      @G16Luis 8 років тому

      si el usuario quiere asignar un valor a una posicion determinada del vector seria asi: scanf("%i", *(arreglo + i)); o me equivoco en algo?

    • @G16Luis
      @G16Luis 8 років тому

      esque me pidieron un codigo en la escuela pero no me sale y no encuentro el error:
      #include
      #include
      int main(){
      //FILE* archivo;
      int i = 0, aux = 1, *arreglo;
      char tecla;
      //archivo = fopen("datos.txt", "w");
      arreglo = (int*)malloc(aux * sizeof(int));
      //if(archivo == NULL){
      // printf("El archivo no fue creado");
      // exit(-1);
      //}
      //else{
      // printf("El archivo 'datos.txt' fue creado CORRECTAMENTE
      ");
      //}
      do{
      printf("Ingrese un registro: ");
      scanf("%i", *(arreglo + i)); // Segun yo aqui no debe de tener el & ¿o si?
      printf("Quieres ingresar otro registro? (s = si, n = no): ");
      do{
      fflush(stdin);
      scanf("%c", &tecla);
      if((tecla != 's' && tecla != 'S') && (tecla != 'n' && tecla != 'N')){ // Para que solo pueda yngresar n, N, s y S
      printf("%c", 07);
      printf("Intente de nuevo: ");
      }
      }while((tecla != 's' && tecla != 'S') && (tecla != 'n' && tecla != 'N'));
      if(tecla == 's' || tecla == 'S'){
      arreglo = (int*)realloc(arreglo, aux++);
      }
      }while(tecla == 's' || tecla == 'S');
      printf("
      ");
      while(i < aux){
      printf("%i, ", *(arreglo + i));
      i++;
      }
      printf("

      ");
      system("pause");
      return 0;
      }

  • @siefex9699
    @siefex9699 5 років тому +3

    Cuando haces el realloc no se lo deberias guardar en un auxiliar de la variable "vector" ? en caso de que no encuentre lugar y pierda los datos

  • @emersonpalaciootalvaro2632
    @emersonpalaciootalvaro2632 4 роки тому +1

    gracias excelente ejemplo

  • @emilioortega9487
    @emilioortega9487 7 років тому +3

    Gracias por los videos

  • @javiperezcano2049
    @javiperezcano2049 10 років тому +3

    Un short int si ocupa 2 pero no es el caso. Un saludo

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  10 років тому +1

      Javi Pérez Cano Realmente no puedo decirte porque el compilador da un numero u otro, puede que el compilador de Dev C++ no cumpla el estandar, pero lo que si que te digo seguro es que un int se concibio para que tuviese 2 bytes y que llegase al numero maximo de (2^16)/2, que son 32 mil y pico... prueba a meterle un numero mayor de 64mil, a ver que si almacena correctamente el numero.
      Creo que esta es la mejor solucion para salir de dudas.
      Un saludo.

  • @HorckunHarotTutoriales
    @HorckunHarotTutoriales 7 років тому +2

    Buenas,
    Supongo que ya lo sabrás pero el Warning fue porque sin querer borraste el puntero del entero en el malloc del vector.
    Saludos.

  • @elkaesar26
    @elkaesar26 8 років тому +2

    el warning segun wikipedia es porque antes de usar malloc debemos usar una funcion llamado casting. es.wikipedia.org/wiki/Malloc

    • @AlejandroCosta1982
      @AlejandroCosta1982 5 років тому +8

      Eso es en C++ .
      cito:
      " Se requiere el uso del casting en C++ debido al fuerte sistema de tipos, mientras que éste no es el caso de C."
      (Ya se que pasaron >3 años, pero para no confundir al que lea su comentario).

  • @manuelsiete9376
    @manuelsiete9376 3 роки тому

    Excelentes temas, tengo la siguiente pregunta.- Es recomendable usar realloc en caso de que el vector resultante es mas grande que el original?

  • @agustinlyon8173
    @agustinlyon8173 3 роки тому +2

    Ugh no logro entender el codigo de cuando hay que eliminar los datos repetidos, me hace mucho ruido. No lo veo claro :(

  • @aureliojosemunozrios9261
    @aureliojosemunozrios9261 7 років тому +1

    Gracias pana.

  • @adriancaraballo3031
    @adriancaraballo3031 7 років тому +5

    Un dato INT no es de tamaño 4 bytes? aclrame esa duda bro, y muy buen video.

  • @enmanuelcolina4203
    @enmanuelcolina4203 3 роки тому

    Mi mente explotó

  • @guillermonoemax
    @guillermonoemax 4 роки тому

    Cuando escribis en el min 14:40 (* (vector+i) == *(vector+j)) que significa los *. Y como funcionan la busqueda de elementos en el vector a travez de la suma de posicion como por ej vector+j

    • @pablolecocq5506
      @pablolecocq5506 4 роки тому +1

      No sé si seguirás queriendo una explicación, pero aquí te dejo una:
      Básicamente "vector" contiene una direccion de memoria y al otorgarle el * es lo mismo que decirle "lo que hay dentro de", es decir, *(vector+1) devuelve lo que hay dentro de la la direccion de memoria almacenada en "vector" + 1. Porqué el +1? Porque cuando haces el malloc o creas un array, la memoria reservada está "alineada". La direccion de memoria de vector + 1 es la contigua a vector, y la de vector + 2, es la contigua la de vector +1...

    • @pablolecocq5506
      @pablolecocq5506 4 роки тому +1

      Bueno te referías a vector + i, pero es el mismo principio

  • @Astromanbaker
    @Astromanbaker 9 років тому +1

    Llevo un par de días buscando información al respecto y de verdad que el video me ha resuelto muchas dudas, ya que en mi caso tengo que hacer una estructura (fichas de clientes) los cuales no se cuantos pueden ser y a la vez una de las variables de la estructura serán facturas ( las cuales irán incrementando) al igual que la estructura de clientes. En mi caso el procedimiento sería igual? Pero en vez de disminuyendo incrementando con N++ ?

  • @leonardobatista7470
    @leonardobatista7470 5 років тому

    Creo que el tercer bucle que usas, no es necesario sólo podías aumentar la j a una posición más y luego refrescarla en el valor actual. Bueno eso pienso yo 😅 además estoy aprendiendo. Solo es mi opinión gracias👍👋

  • @juangarcia-pe9ql
    @juangarcia-pe9ql 4 роки тому +1

    7 años despues sigue salvando, deberias ser santo

  • @feriasTopG
    @feriasTopG 7 років тому +1

    Amigo tengo una duda para que sirve la libreria time.h Grasias por tus videos son muy buenos pero cada vez se ba poniendo dificil

    • @PipeFelpe
      @PipeFelpe 5 років тому

      para los numeros random

  • @alansalmeron2359
    @alansalmeron2359 9 років тому

    En el video de matrices dinamicas no pusiste un puntero en donde en este video en el minuto 7:00 dices que va, entonces nadamas se ponen en los tipos de datos? por ejemplo: si es una matriz dinamica **m1, se asignaria asi el valor?: m1 = (int**)malloc(tamaño*sizeof(int*)); no se le pone un puntero menos en esta parte que dandoasi: *m1 = (int**)ma...... ???

  • @javiperezcano2049
    @javiperezcano2049 10 років тому +2

    Y x que al
    compilar imprime 4?

  • @mihaelarcebaldo5361
    @mihaelarcebaldo5361 9 років тому +2

    Por qué te compiló el programa si al primer (int) de la línea 15 no le pusiste (int*) como supuestamente se debe hacer?

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  9 років тому +33

      +Mihael Arce Baldo Para este tipo de cosas los simpsons lo explicaron muy bien:
      ua-cam.com/video/LhpPfkpOCDk/v-deo.html
      Ya fuera de bromas, es erróneo tal como yo lo hice, pero como lo que tu haces es reservar memoria, pues mientras que no reserves menos de la que ocupas, no debes de tener ningun problema, simplemente estas reservando espacio de mas que nunca va a ser utilizado. Otra posible explicación es que el compilador se de cuenta y optimice el tamaño, esto ultimo no lo puedo asegurar puesto que no se en detalle como funciona el compilador de C (existen varios diferentes y creeme que entender como funciona un compilador no es naaaaada sencillo).
      Un saludo.

  • @maryta22
    @maryta22 4 роки тому

    Gracias :)

  • @joseantoniovargasserrano7336
    @joseantoniovargasserrano7336 3 роки тому

    Alguien me podría guiar en la función void aleatorio que usa

  • @carlossantaella139
    @carlossantaella139 8 років тому +1

    una pregunta y espero me puedas responder por que en vez de poner el REALLOC no pusistes simplemente este codigo
    for(i = 0 ; i < E ; i++){
    printf("%i, ",*(vec+i));
    }
    printf("
    ");

    • @AlejandroCosta1982
      @AlejandroCosta1982 5 років тому +1

      realloc asigna una nuevo valor al espacio de memoria asignado previamente al vector.
      Lo que expones en tu comentario es para mostrar por pantalla los valores asignados en el vector (printf) y NO para asignar nuevo espacio de memoria.
      (Ya se que pasaron >3 años, pero para no confundir al que lea su comentario).

  • @mynormeza4997
    @mynormeza4997 10 років тому

    Para usar realloc se tiene que ultilizar malloc primero por ley? osea q no se puede usar realloc cuando se asigna un vector con cantidad N de la manera tradicional?

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  10 років тому +1

      Noop, siempre primero un malloc o calloc (en el siguiente video se explica) y despues se podra hacer un realloc... sino siempre usariamos un realloc xD!!

    • @mynormeza4997
      @mynormeza4997 10 років тому +1

      Cierto! :D Gracias, exelente canal sigue asi!

  • @samuelalegre7909
    @samuelalegre7909 3 роки тому

    En que video explicaba como crear un número random

  • @alejandrocervantes8185
    @alejandrocervantes8185 3 роки тому

    6:13

  • @ahmetsaykal468
    @ahmetsaykal468 3 роки тому

    cok iyi

  • @lucgpg
    @lucgpg 6 років тому +2

    A veces imprime 3 y otras veces imprime 1 o 2 valores (después de hacer realloc) ¿es normal?

    • @luisalbertomunoz3643
      @luisalbertomunoz3643 4 роки тому

      a mi me hace exactamente lo mismo

    • @mrhiggjins
      @mrhiggjins 4 роки тому

      No puede ser normal

    • @joelayllon9441
      @joelayllon9441 3 роки тому +1

      Claro que sí es normal, para eso sirve el 'srand', para sacar un valor 'random', es decir, aleatorio.

  • @icarvs7
    @icarvs7 4 роки тому

    macho

  • @xadrianc
    @xadrianc 8 років тому

    He hecho el programa y me tira un error de windows al ejecutar, copio mi codigo porque veo todo identico... a ver si alguien me ayuda:
    (El depurador me dice que el error salta en el bucle de impreson del vecotor redimensionado, pero no se por que, en el da un error de segmentacion)
    #include
    #include
    #include
    void aleatorio (int *vector, int N);
    int main(){
    int i, j, k;
    int N = 10;
    int *vector;
    vector =(int*)malloc(N*sizeof(int)); //asigna un tamaño al vector dinamico
    if(vector == NULL){
    printf("No se ha podido reservar espacio de memoria para el vector-
    ");
    }
    else{
    aleatorio(vector, N);
    for(i=0; i

    • @xadrianc
      @xadrianc 8 років тому +1

      Ya he encontrado mis dos errore:
      1-:
      en el segundo if puse:
      if(vector = NULL)
      en lugar de
      if(vector == NULL){
      2-
      if((vector+1)==(vector+j))
      confundi la i con un 1 y solo me imprimia un termino la segunda vez
      if((vector+i)==(vector+j))
      Todo ok!

    • @franciscoabad6379
      @franciscoabad6379 3 роки тому +1

      @@xadrianc Increible lo que un solo signo puede hacer
      A mi me pasó lo mismo

  • @Leandro-np1uk
    @Leandro-np1uk 4 роки тому

    y si el primer elemento del vector es igual al ultimo? de donde saco el siguiente numero para reemplazar? ahí me mato ! Saludos

  • @ahmetsaykal468
    @ahmetsaykal468 3 роки тому

    el van

  • @leoreichert546
    @leoreichert546 2 роки тому +2

    No terminaste de explicar realloc, la verdad me desiluciono, porque seria bueno aprender C desde un canal tan completo, pero me gusta saber como funciona cada cosa y solo hiciste un ejercicio innecesario y no explicaste el funcionamiento de realloc.

  • @javiperezcano2049
    @javiperezcano2049 10 років тому +1

    La explicacion es incorrecta. Un Int son 4bytes

    • @EmpiezaAProgramar
      @EmpiezaAProgramar  10 років тому +1

      Javi Pérez Cano Pues lo cierto es que es correcto, son 2 bytes o 16 bits.Aqui puedes leerlo en la wikipedia:en.wikipedia.org/wiki/C_data_types
      Un saludo.

    • @clakoclakson
      @clakoclakson 9 років тому

      +Javi Pérez Cano El dato será incorrecto, pero la explicación, además de correcta me parece excelente!