Cómo crear una "brecha" en un array

Iniciado por 0xDani, 25 Abril 2013, 14:44 PM

0 Miembros y 1 Visitante están viendo este tema.

0xDani

Buenas, tengo una duda, a ver si me podeis ayudar:

Tengo un array en memoria, y tengo que abrir un hueco de n bytes, en el offset m del array, desplazando los bytes del array desde la posición m hacia adelante, n posiciones cada uno.

Cómo se hace esto?

Tal vez la explicación es un tanto confusa, si no lo entendéis decidmelo.

Saludos!
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

xiruko

podrias dar algo mas de informacion? ese array en memoria, esta en la memoria de otro proceso? o es en tu mismo programa que tienes un array y quieres hacerle eso?

0xDani

No, ese array está en mi proceso. Lo que quiero hacer, más claramente, es crear un hueco un una determinada posición del array para insertar más datos en medio.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

xiruko

asignacion de memoria estatica o dinamica? si es dinamica con la funcion realloc te deberia bastar, y si es estatica no se si puedes modificarla pues el espacio se reserva en la compilacion. deberias entonces usar algun puntero para reservar la memoria que necesites partiendo de la cadena inicial.

rir3760

Como ya te comentaron en la caso del lenguaje C y si se trata de un array no es posible, en su lugar se debe utilizar un puntero y reservar memoria de forma dinámica mediante malloc, calloc o realloc.

En ese escenario los pasos son:
1) Reservar un bloque con el nuevo tamaño y los datos originales mediante la función realloc.
2) Para emular el desplazamiento copias la parte final del bloque con memmove (si las áreas no se sobreponen puedes utilizar memcpy).
3) Si deseas que todos los bytes del hueco estén a cero puedes utilizar la función memset.

Un saludo
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

0xDani

Es un array dinámico. La verdad había pensado en las funciones memcpy y demás, pero no sabía que memmove permite que las áreas de memoria se sobrepongan.

Gracias por las repuestas!
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM