char 포인터 (예 : * pData)가 NULL로 초기화되지 않고 선언 된 코드 스 니펫을 발견했습니다. 역 참조 이전에 비 고유 포인터에 값 할당
char *pData, *pData2;
char string[10] = "Hello"
pData2 = &string[0];
SomeFuntionToAssignValue(pData2, &pData);
SomeFuntionToAssignValue(char *pData2, char **pData)
{
if (something)
{
*pData = pData2;
}
else if (something)
{
*pData = &pData2[some calculation]
}
}
는 pData의이 시간의 어느 시점에, 기능 SomeFuntionToAssignValue()를 호출 한 후 "메모리 액세스 예외"오류가 발생 역 참조 할 수 있습니까?
컴파일 또는 로컬 테스트 (이 테스트는 언제든지 다시로드 할 수 있으므로 일반적으로 메모리 손상 가능성이 줄어 듭니다) 때문에 "메모리 액세스 예외"오류가 발생하지 않았습니다.
그러나 대상이 적어도 일주일 동안 다시로드되지 않은 필드 환경에서 테스트하는 동안 "메모리 액세스 예외"오류가 발생했습니다.
따라서 char *pData = NULL
을 수행하지 않으면 "메모리 액세스 예외"오류가 발생할 수 있습니까?
플랫폼, 아키텍처 및 컴파일러를 지정하지 않으면 C에 "메모리 액세스 예외"가 없습니다. –
함수를 호출하는 방식으로 호출하면 호출 후에'pData'를 사용하는 것이 안전합니다. –
@Someprogrammerdude - 일부 계산 결과가 범위 [0, strlen (pData2)]의 결과를 제공하는 경우 안전 –