Memcpy kullanarak bir dizide kopyalanan işaretçilerin nasıl okunacağını karıştırıyorum. Denediğim şey aşağıdadır, ancak çalışmaz.memcpy ve işaretçiler
Temel olarak, dizi modasına benzer işaretçileri kopyaladığım bellek bloğunu ayırdım, ancak yeniden deneme sırasında çalışmıyor. Bu temel veri tipleri ile çalışır iken düzgün
ben element
blokta şey saklamak istediğiniz, O integers
veya pointers
olabilir. gayet iyi çalışıyor fakat f2_int_ptr
çalışmıyor f1_int
Yukarıdaki kodda
#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;
}
.
int *v = (int*)0;
Not: 'void * '(ve makro) arasındaki tüm bu yazım hataları kodunuzu oldukça kötü yapmıyor. Her yerde * void * kullanmanın bir nedeni var mı? –
Bu, tüm temel türler için çalışır, ancak yalnızca işaretçiler için çalışmıyor. – Avinash
Okumayı düşünüyorsanız, kodunuzu açıklığa kavuşturmaya çalışmalısınız. Bir aldatmaca olan C (http://www.gnu.org/fun/jokes/unix-hoax.html) bu şekilde kodlamak için bir argüman değildir. – mouviciel