2016-06-22 2 views
0

주로 비트 맵 작업을 위해 unsafe 코드를 읽습니다. 그러나 나는 unsafeness의 한계에 대한 설명을 찾을 수 없습니다. 배열의 포인터를 사용하여 검사하지 않으므로 해당 범위를 벗어난 메모리에 액세스 할 수 있음을 이해합니다. 여태까지는 그런대로 잘됐다. 하지만 만약 내가 하면 그 메모리에 액세스 할 수 있습니다. 무슨 일이야? 다른 변수의 값을 변경하는 중입니까? 또는 프로그램의 바이너리 코드를 변경하십시오. 아니면 그냥 예외를 제기?안전하지 않은 코드는 얼마나 안전하지 않습니까?

내가 안전하지 않은 코드를 사용하기로 결정하기 전에 발생할 수있는 최악의 상황을 알고 싶습니다.

+2

정의되지 않은 동작입니다. 프로그램이 실행되는 정확한 컨텍스트를 알지 못하면 어떤 일이 일어날 지 예측할 수 없습니다. – itsme86

+0

@ itsme86 감사. 나는 알려진 한계가 있다고 생각한다. 예를 들어 - 내 코드는 컴퓨터의 다른 프로세스 용으로 예약 된 메모리에 액세스 할 수 없으므로 다른 프로그램이나 운영 체제를 중단시킬 수 없습니다. 권리? (리소스를 사용하지 않는 것 말입니다. 메모리 공간을 변경할 수 없습니다. 맞습니까?) – ispiro

+0

이 질문은 [Programmers StackExhcange] (http://programmers.stackexchange.com/)에 더 적합합니까? 그렇지 않으면 좋은 질문 :) – Roman

답변

0

안전하지 않은 코드로 인해 메모리 누수 또는 기타 임의의 오류가 발생할 수 있습니다. 안전하지 않은 코드는 이유 때문에 안전하지 않습니다. 예를 들어 C++에서는 포인터가 있었고 기본적으로 실제 컴퓨터의 메모리 덩어리를 가리 킵니다. 포인터로 잘못 될 수있는 많은 다른 것들이 있습니다. 당신이 무엇을하고 있는지 확실하지 않은 경우 포인터를 사용하지 않는 것이 가장 좋습니다. 나는 C#에서 안전하지 않은 코드에 대해서도 똑같이 말할 수 있다고 생각한다. itsme86은 매우 예측할 수 없습니다.

관련 문제