2016-10-29 6 views
-1

길이가 10 인 포인터 배열을 동적으로 할당했습니다.c memset 포인터 배열

이제이 배열을 모두 "1"로 초기화하고 싶습니다. 내가 배열을 인쇄하면 내가 배열을 인쇄하는 경우

는하지만 [2] [1]가 나에게이 배열이 아닌 "1"로 모든 설정 왜 4905904374893479. 같은 높은 수를 보여줍니다 나에게 0 를 보여줍니다 위치?

나는 많은 경험이 없지만 해결책을 찾지 못했습니다.

uint64_t *array= malloc((10) * sizeof(uint64_t)); 
memset(array,1, sizeof(*array)); 
printf("array[2]: %llu \n", primes[2]); 
+0

난 당신이 –

+0

그것의 당신이하려고하는 것을 취소하지 64 개 비트 정수 배열에 정상 정수를 할당하려고하기 때문에 이런 생각 해야 할 것. 당신은 10 개의 64 비트 정수로 구성된 배열을 할당합니다. 그런 다음 첫 번째 값을 0x01010101010101 (72340172838076673)으로 설정하고 다른 값은 전혀 설정하지 않으며 값은 임의로 설정됩니다. –

답변

3

memset 그래서 당신은 각 64 비트 항목에 무엇을 얻을 0x0101010101010101입니다 char의 채 웁니다.

BTW, sizeof(*array)은 배열의 단일 항목 크기를 제공합니다.

당신은뿐만 아니라 간단한 for 루프를 사용할 수 있습니다 :

for (i=0; i<10; i++) 
    array[i] = 1; 
4

*array단일uint64_t, 전체가 아닌 배열입니다. 즉, memset이 전체 배열을 설정하지 않고 그 배열의 첫 번째 요소 만 설정한다는 의미입니다.

, 당신이 sizeof(array)을 사용하기로 결정하기 전에, 그렇게 또한 올바른 크기되지 않습니다 배열에 포인터에 붕괴 점에 유의.

memset 함수는 더 넓은 데이터 형식이 아닌 바이트에서 작동하므로 모든 바이트를 같은 값으로 설정하지 않으려면 memset이 작업 도구가 아닙니다. 그것은 모두 0으로 패턴으로 표현되기 때문에 단순히 0으로 설정할 때 작동합니다.

가장 좋은 방법은 같은 명시 적으로 각을 초기화하는 것입니다 :

uint64_t *array= malloc(10 * sizeof(uint64_t)); 
// should really check for malloc failure. 
for (size_t idx = 0; idx < 10; idx++) 
    array[idx] = 1;