Bloque 7.2: Malloc y Realloc con Vector Dinamico

  Рет қаралды 62,112

Empieza A Programar

Empieza A Programar

10 жыл бұрын

Se explica para que sirven y la utilizacion de Malloc y Realloc con un ejemplo de Vector Dinamico que elimina los valores que tiene repetidos y reajusta su tamaño.

Пікірлер: 79
@miguelangelmartinezcasado8935
@miguelangelmartinezcasado8935 6 жыл бұрын
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!!!
@AlejandroCosta1982
@AlejandroCosta1982 4 жыл бұрын
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 8 ай бұрын
ya es tu profesor online en todo lo que sube a su canal jajaj
@sergionidhas
@sergionidhas 5 жыл бұрын
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 4 жыл бұрын
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
@alejandrosauraseo
@alejandrosauraseo 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.
@frankjobs7113
@frankjobs7113 4 жыл бұрын
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
@flordurante3454
@flordurante3454 9 ай бұрын
Excelentes tus tutoriales, super didácticos, gracias por compartirlos!
@emilioortega9487
@emilioortega9487 7 жыл бұрын
Gracias por los videos
@emersonpalaciootalvaro2632
@emersonpalaciootalvaro2632 4 жыл бұрын
gracias excelente ejemplo
@RodrigoEsquivel22
@RodrigoEsquivel22 10 жыл бұрын
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..
@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.
@user-eo5ew1ue3i
@user-eo5ew1ue3i Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
explicas muy bien, quizás un poco difíciles los ejemplos pero muy bueno el curso en general.
@aureliojosemunozrios9261
@aureliojosemunozrios9261 6 жыл бұрын
Gracias pana.
@manuelsiete9376
@manuelsiete9376 2 жыл бұрын
Excelentes temas, tengo la siguiente pregunta.- Es recomendable usar realloc en caso de que el vector resultante es mas grande que el original?
@maryta22
@maryta22 3 жыл бұрын
Gracias :)
@kevinender5409
@kevinender5409 7 жыл бұрын
muy claro para los q tienen ciertos conocimientos previos..pero para comenzar a progrmamar ...mmmmm!!!!
@EmpiezaAProgramar
@EmpiezaAProgramar 7 жыл бұрын
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; }
@siefex9699
@siefex9699 4 жыл бұрын
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
@HorckunHarotTutoriales
@HorckunHarotTutoriales 6 жыл бұрын
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.
@javiperezcano2049
@javiperezcano2049 9 жыл бұрын
Un short int si ocupa 2 pero no es el caso. Un saludo
@EmpiezaAProgramar
@EmpiezaAProgramar 9 жыл бұрын
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.
@javiperezcano2049
@javiperezcano2049 9 жыл бұрын
Y x que al compilar imprime 4?
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
Ugh no logro entender el codigo de cuando hay que eliminar los datos repetidos, me hace mucho ruido. No lo veo claro :(
@enmanuelcolina4203
@enmanuelcolina4203 2 жыл бұрын
Mi mente explotó
@ahmetsaykal468
@ahmetsaykal468 3 жыл бұрын
cok iyi
@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👍👋
@Astromanbaker
@Astromanbaker 9 жыл бұрын
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++ ?
@elkaesar26
@elkaesar26 8 жыл бұрын
el warning segun wikipedia es porque antes de usar malloc debemos usar una funcion llamado casting. es.wikipedia.org/wiki/Malloc
@AlejandroCosta1982
@AlejandroCosta1982 4 жыл бұрын
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).
@icarvs7
@icarvs7 3 жыл бұрын
macho
@joseantoniovargasserrano7336
@joseantoniovargasserrano7336 3 жыл бұрын
Alguien me podría guiar en la función void aleatorio que usa
@adriancaraballo3031
@adriancaraballo3031 6 жыл бұрын
Un dato INT no es de tamaño 4 bytes? aclrame esa duda bro, y muy buen video.
@AlejandroCosta1982
@AlejandroCosta1982 4 жыл бұрын
short int = 2 bytes = 16 bits.
@agustinroman1074
@agustinroman1074 2 жыл бұрын
Depende la arquitectura del SO
@mihaelarcebaldo5361
@mihaelarcebaldo5361 8 жыл бұрын
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 8 жыл бұрын
+Mihael Arce Baldo Para este tipo de cosas los simpsons lo explicaron muy bien: kzbin.info/www/bejne/gpnTgZmhpbR2es0 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.
@feriasTopG
@feriasTopG 6 жыл бұрын
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
@samuelalegre7909
@samuelalegre7909 3 жыл бұрын
En que video explicaba como crear un número random
@juangarcia-pe9ql
@juangarcia-pe9ql 4 жыл бұрын
7 años despues sigue salvando, deberias ser santo
@alejandrocervantes8185
@alejandrocervantes8185 3 жыл бұрын
6:13
@carlossantaella139
@carlossantaella139 8 жыл бұрын
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 4 жыл бұрын
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).
@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...... ???
@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
@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 жыл бұрын
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 жыл бұрын
Bueno te referías a vector + i, pero es el mismo principio
@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 жыл бұрын
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 жыл бұрын
Cierto! :D Gracias, exelente canal sigue asi!
@lucgpg
@lucgpg 5 жыл бұрын
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 3 жыл бұрын
No puede ser normal
@joelayllon9441
@joelayllon9441 2 жыл бұрын
Claro que sí es normal, para eso sirve el 'srand', para sacar un valor 'random', es decir, aleatorio.
@ahmetsaykal468
@ahmetsaykal468 3 жыл бұрын
el van
@ahmetsaykal468
@ahmetsaykal468 3 жыл бұрын
ne
@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 жыл бұрын
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 жыл бұрын
@@xadrianc Increible lo que un solo signo puede hacer A mi me pasó lo mismo
@javiperezcano2049
@javiperezcano2049 9 жыл бұрын
La explicacion es incorrecta. Un Int son 4bytes
@EmpiezaAProgramar
@EmpiezaAProgramar 9 жыл бұрын
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 8 жыл бұрын
+Javi Pérez Cano El dato será incorrecto, pero la explicación, además de correcta me parece excelente!
@leoreichert546
@leoreichert546 Жыл бұрын
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.
Bloque 7.3: Calloc y Free con Vector Dinamico
13:48
Empieza A Programar
Рет қаралды 26 М.
you will never ask about pointers again after watching this video
8:03
Low Level Learning
Рет қаралды 2,1 МЛН
Жайдарман | Туған күн 2024 | Алматы
2:22:55
Jaidarman OFFICIAL / JCI
Рет қаралды 1,8 МЛН
Incredible magic 🤯✨
00:53
America's Got Talent
Рет қаралды 76 МЛН
Мы никогда не были так напуганы!
00:15
Аришнев
Рет қаралды 6 МЛН
Bloque 7.4: Strings Dinamicos y Funcion exit
21:38
Empieza A Programar
Рет қаралды 24 М.
Bloque 4.1: ¿Que es una Funcion? y Ejemplos
18:12
Empieza A Programar
Рет қаралды 123 М.
Stack vs Heap Memory in C++
19:31
The Cherno
Рет қаралды 557 М.
Memoria dinámica en C - Malloc, Calloc y Realloc
20:56
New line
Рет қаралды 2,4 М.
Use Arc Instead of Vec
15:21
Logan Smith
Рет қаралды 138 М.
Hash Tables and Hash Functions
13:56
Computer Science
Рет қаралды 1,5 МЛН
Recursividad, explicación y ejemplo en Lenguaje C.
17:36
El Profe Ariel
Рет қаралды 740
Bloque 7.1: ¿Que es la Memoria Dinamica?
17:56
Empieza A Programar
Рет қаралды 68 М.
malloc(), calloc(), realloc() y free() en C
15:18
Programación G2D
Рет қаралды 906
Жайдарман | Туған күн 2024 | Алматы
2:22:55
Jaidarman OFFICIAL / JCI
Рет қаралды 1,8 МЛН