는 I는 UINT32 어레이의 홀수 또는 짝수 인덱스에서 값의 평균을 계산하기 위해이 함수를 썼다세그먼트 오류 해제를 언급 이중 포인터
//BUFF_SIZE = 8
uint32_t buffer[BUFF_SIZE] = {0,1,2,3,4,5,6,7};
uint32_t * average = 0; //memory to get result back
//even indices => 0,2,4,6
average_uint32_t(buffer, buffer + BUFF_SIZE - 1, 2, &average);
printf("average of even elements = %d\n", *average);
//odd indices => 1,3,5,7
average_uint32_t(buffer + 1, buffer + BUFF_SIZE, 2, &average);
printf("average of odd elements = %d\n", *average);
그러나 프로그램의 평균에 결과 할당을 지정할 때 세그먼트 화 오류가 발생합니다 (함수 코드에 주석 처리 한대로). 출력은 다음과 같습니다.
count=1,value=0,sum=0
count=2,value=2,sum=2
count=3,value=4,sum=6
count=4,value=6,sum=12
Signal: SIGSEGV (Segmentation fault)
무엇이 잘못 되었나요? 나는 평균 함수에 대한 단일 포인터가 문제를 해결할 수있을 것 같아? 하지만 이중 포인터가 작동하지 않는 이유는 무엇입니까?
문제를 해결해 주셔서 감사합니다. 좋은 점이 있지만 처음부터 유효한 메모리 주소를 가리키지 않는 이유는 무엇입니까? –
@SaeidYazdani :'uint32_t * average'는 포인터이고'uint32_t * average = 0;'은 단순히'uint32_t * average = NULL;'을 의미합니다. 따라서 'NULL'에 대한 포인터를 초기화하는 것이 무엇을 의미하는지 이해한다면 '0'은 대부분의 플랫폼에서 제한된 메모리 위치 일 것입니다. – sameerkn