Confundo cómo leer los punteros copiados en una matriz usando memcpy. Lo que he intentado a continuación, pero no funciona.memcpy y punteros
Básicamente, he asignado un bloque de memoria en el que estoy copiando punteros similares a la moda de la matriz, pero durante el nuevo intento no está funcionando. Si bien esto funciona correctamente con los tipos de datos básicos
Quiero almacenar cualquier cosa en el bloque element
, puede ser integers
o .
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INDEX(x) ((char *)elements + (sizeof(int*) * (x)))
int size = 10;
void f2_int_ptr() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
int *v = (int *) malloc (sizeof(int));
memcpy (v, &i, sizeof (int));
memcpy (INDEX(i) , v, sizeof (int*));
}
for (i = 0; i < size; i++) {
int *v = (int*)0;
memcpy (v, INDEX(i), sizeof(int *));
printf ("%d\n", *v);
}
}
void f1_int() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int));
for (i = 0; i < size; i++) {
memcpy (INDEX(i) , &i, sizeof (int));
}
for (i = 0; i < size; i++) {
int v;
memcpy (&v, INDEX(i), sizeof (int));
printf ("%d\n", v);
}
}
int main(){
f1_int();
f2_int_ptr();
return 0;
}
En el código anterior funciona bien, pero f1_int
f2_int_ptr
no funciona.
Nota: Todo este tipo de conversión desde y hacia 'void *' (y la macro) no está haciendo que su código sea bastante desagradable. ¿Hay alguna razón por la que estés usando 'void *' en todas partes? –
Esto funciona para todos los tipos básicos, pero no funciona solo para punteros. – Avinash
Debería intentar aclarar su código si desea que se lea. C es un engaño (http://www.gnu.org/fun/jokes/unix-hoax.html) no es un argumento para codificar de esa manera. – mouviciel