Bloque 7.2: Malloc y Realloc con Vector Dinamico

Поделиться
HTML-код
  • Опубликовано: 27 окт 2024

Комментарии • 79

  • @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

    • @AlejandroCosta1982
      @AlejandroCosta1982 5 лет назад +12

      Venía a decir lo mismo. No podía prestar atención al resto del video. Me molestaba ese * que faltaba. 😜

    • @ahmetsaykal468
      @ahmetsaykal468 3 года назад

      ne

    • @gabrii_ro2228
      @gabrii_ro2228 2 года назад

      lo sabia

  • @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 11 месяцев назад +1

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

  • @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.

  • @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!!!

  • @flordurante3454
    @flordurante3454 Год назад

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

  • @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

  • @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

  • @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..

  • @fedecereda
    @fedecereda Год назад

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

  • @emilioortega9487
    @emilioortega9487 7 лет назад +3

    Gracias por los videos

  • @emersonpalaciootalvaro2632
    @emersonpalaciootalvaro2632 4 года назад +1

    gracias excelente ejemplo

  • @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

  • @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 7 лет назад

      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 7 лет назад

      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;
      }

  • @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?

  • @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.

  • @aureliojosemunozrios9261
    @aureliojosemunozrios9261 7 лет назад +1

    Gracias pana.

  • @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.

  • @enmanuelcolina4203
    @enmanuelcolina4203 3 года назад

    Mi mente explotó

  • @adriancaraballo3031
    @adriancaraballo3031 6 лет назад +5

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

  • @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++ ?

  • @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 :(

  • @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

  • @maryta22
    @maryta22 3 года назад

    Gracias :)

  • @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:
      ruclips.net/video/LhpPfkpOCDk/видео.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.

  • @juangarcia-pe9ql
    @juangarcia-pe9ql 4 года назад +1

    7 años despues sigue salvando, deberias ser santo

  • @javiperezcano2049
    @javiperezcano2049 10 лет назад +2

    Y x que al
    compilar imprime 4?

  • @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👍👋

  • @ahmetsaykal468
    @ahmetsaykal468 3 года назад

    cok iyi

  • @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).

  • @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).

  • @alansalmeron2359
    @alansalmeron2359 8 лет назад

    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...... ???

  • @samuelalegre7909
    @samuelalegre7909 3 года назад

    En que video explicaba como crear un número random

  • @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

  • @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.

  • @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!

  • @joseantoniovargasserrano7336
    @joseantoniovargasserrano7336 3 года назад

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

  • @icarvs7
    @icarvs7 4 года назад

    macho

  • @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

  • @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

  • @alejandrocervantes8185
    @alejandrocervantes8185 3 года назад

    6:13

  • @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.

  • @ahmetsaykal468
    @ahmetsaykal468 3 года назад

    el van

  • @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!