Autor
|
Tema: malloc y free (Leído 2,302 veces)
|
safami85
Desconectado
Mensajes: 1
|
Buenas gente! les comento rapidito y espero que de forma clara un problemita que me esta llevando ya un par de dias resolver: Estoy trabajando con varias matrices dinamicas, usando las funciones malloc y free. Logre reservar el espacio de memoria con malloc y liberarlo con free pero esto siempre dentro de mi funcion principal main(). Como tengo que realizar muchas operaciones con las matrices (sumas, multiplicaciones, etc.) decidi hacer dos funciones, una para "generar" las matrices con malloc y otra funcion para "liberarlas" usando free. El tema es que el programa (que lo cargo en un microcontrolador) no puedo hacerlo funcionar de esta ultima manera. Alguien podria decirme de que forma deberia usar malloc y free en dos funciones diferentes sin problemas? Parte del codigo que estoy usando:(Hay cosas que saque por simplicidad) main(){ double **matA; set_matrix(6,6,matA); free_mem(matA,6); //Resevo el bloque de memoria void set_matrix(int row, int col,double **matr){ matr = malloc(row * sizeof(double *)); for(int i = 0; i < row; i++){ matr[i] = malloc(col * sizeof(double)); } } //Libero el espacio void free_mem(double **matr, int a){ for(int i=0;i<a;i++) free(matr[i]); free(matr); }
|
|
« Última modificación: 14 Diciembre 2012, 03:57 am por simorg »
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Tu código es incorrecto, estas asignando un nuevo array de X cantidad y almacenas el puntero a tal memoria en la mismo espacio de memoria, lo que buscas es esto: PULONG* CustAllocate( PULONG* lppMain, ULONG x, ULONG y) { lppMain = (PULONG *)malloc(x * sizeof(PULONG )); for(int z = 0;z < x; z++) lppMain [z ] = malloc(y * sizeof(PULONG )); return lppMain; } PULONG* CustFree( PULONG* lppMain, ULONG x) { for(int z = 0; z < x; z++) return lppMain; }
Y si piensas trabajar en Windows, entonces es mejor usar la W32 que la libreria(s) de VC.
|
|
|
En línea
|
|
|
|
naderST
|
Otra opción podría ser la siguiente: #include <stdio.h> #include <stdlib.h> #define NUMERO_COLUMNAS 2 void * reservar_matriz(int m, int n) { return malloc(sizeof(double)*m *n ); } void liberar_matriz(void * matrizp) { } int main() { /* Reserva una matriz de 10 filas por NUMERO_COLUMNAS columnas */ double (*matriz)[NUMERO_COLUMNAS] = reservar_matriz(10,NUMERO_COLUMNAS); if(matriz == NULL) { fprintf(stderr , "Ocurrión algún problema con malloc()\n"); return 1; } matriz[0][0] = 20.5; printf("%.1f\n", matriz [0][0]); liberar_matriz(matriz); return 0; }
|
|
|
En línea
|
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Tu código es incorrecto, estas asignando un nuevo array de X cantidad y almacenas el puntero a tal memoria en la mismo espacio de memoria Sin animo de ofender pero, honestamente, no entiendo esa explicación. El problema que se describe en el primer mensaje se debe a que en C todo se pasa por valor, cuando se realiza la llamada: set_matrix(6,6,matA);
La función recibe los argumentos 6, 6 y el valor almacenado en la variable "matA", ellos son utilizados para inicializar cada uno de los parámetros. Como todas las operaciones en la mentada función se realizan en los parámetros y como estos son variables locales los cambios no afectaran a la variable utilizada en la llamada ("matA" de main). Para solucionarlo se debe emular el paso por referencia pasando la dirección del objeto que desee modificarse mas los otros cambios necesarios (en el prototipo y definición). Ya esta solucionado (en otro foro). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Malloc ...
« 1 2 »
Programación C/C++
|
roser24
|
14
|
6,842
|
5 Mayo 2010, 21:15 pm
por Akai
|
|
|
Debian 6.0 free y non-free. Tú eliges
Noticias
|
wolfbcn
|
2
|
2,789
|
16 Diciembre 2010, 19:26 pm
por do-while
|
|
|
Dudas con malloc...
Programación C/C++
|
Metal-byte
|
2
|
2,026
|
1 Enero 2012, 16:15 pm
por Metal-byte
|
|
|
Error en malloc()
Programación C/C++
|
soyloqbuskas
|
8
|
5,258
|
11 Noviembre 2012, 20:18 pm
por Foxy Rider
|
|
|
Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
Programación C/C++
|
Gallu
|
2
|
2,378
|
1 Noviembre 2017, 20:21 pm
por Gallu
|
|