memset no llena la matriz

u32 iterations = 5; u32* ecx = (u32*)malloc(sizeof(u32) * iterations); memset(ecx, 0xBAADF00D, sizeof(u32) * iterations); printf("%.8X\n", ecx[0]); ecx[0] = 0xBAADF00D; printf("%.8X\n", ecx[0]); free(ecx); 

En pocas palabras, ¿por qué mi salida es la siguiente?

 0D0D0D0D BAADF00D 

ps: u32 es un simple typedef de unsigned int

editar:

  • Comstackndo con gcc 4.3.4
  • se incluye string.h

El segundo parámetro de memset se escribe como un int, pero en realidad es un carácter sin signo . 0xBAADF00D convertido a un carácter sin signo (byte menos significativo) es 0x0D, por lo que memset llena la memoria con 0x0D.

El segundo argumento de memset () es un carácter no int o u32. C trunca automáticamente el int 0xBAADF00D en un carácter 0x0D y establece cada carácter en la memoria según lo solicitado.

Lo probé con wmemset (). Parece funcionar:

 #include  #include  #include  #include  int main(void){ uint32_t iterations = 5; uint32_t *ecx = (uint32_t*)malloc(sizeof(uint32_t) * iterations); wmemset( (wchar_t*)ecx, 0xBAADF00D, sizeof(uint32_t) * iterations); printf("%.8X\n", ecx[0]); ecx[0] = 0xBAADF00D; printf("%.8X\n", ecx[0]); /* Update: filling the array with memcpy() */ ecx[0] = 0x11223344; memcpy( ecx+1, ecx, sizeof(*ecx) * (iterations-1) ); printf("memcpy: %.8X %.8X %.8X %.8X %.8X\n", ecx[0], ecx[1], ecx[2], ecx[3], ecx[4] ); }