이것은 위법입니까/위험입니까?정적 변수 포인터?
int* static_nonew()
{
static int n = 5;
return &n;
}
컴파일러가 문제가있는 것 같지 않지만, 다른 사람이 메모리를 필요로 할 때 덮어 쓰지 보호 포인터 위치 자체가 무엇입니까?
편집 : 내가 왜이 질문을했는지에 대한 설명이 조금 더 있습니다. 참고 : 저는 C++로 프로그래밍하고 있습니다. C++로 질문하는 것보다 C 코드가 많아서 C로 태그를 붙였습니다.
정적 인지도를 반환해야하는 클래스가 있습니다. 이 맵을 여러 번 할 필요가없는 것처럼 프로그램 전체에 걸쳐이 맵을 한 번만 초기화하면됩니다. 이러한 이유 때문에 다음과 같은 것을 갖게되었습니다.
전환 클래스 생성자는 전환에 자신을 추가합니다. 그런 식으로 전환을 한 번 생성 한 다음 포인터를 반환합니다. 스택에 할당 된 변수에 대한 참조를 만들면 매우 쉽게 덮어 쓸 수 있으며 "안전하지 않음"이라는 것을 기억합니다. 함수 내에서 생성 된 정적 변수가 정확히 어떻게 작동하는지 정확하게 알지 못했습니다.
지도가 클라이언트 코드에 의해 변경 될 것으로 예상되지 않으면 const 참조 또는 const에 대한 포인터를 반환해야합니다. 그러면 정적 데이터와 관련된 대부분의 위험이 제거됩니다. –