INT의 main() { 정렬 _aligned_free 메모리 함수에 의해 해제되지
INT * 정렬;
// 정렬 값 0xcccccccc ??? {
}
정렬 = INT (*) _ aligned_malloc (는 sizeof (INT) * 1000, 16);
// 정렬 값 0x001d9490 -842150451 {
}
_aligned_free (정렬);
//// 정렬 값 0x001d9490 {} -17891602 변경하지 않은 주소
정렬 == * 100;
int * y;
// Y 값 0xcccccccc ??? {
}
새로운 Y = INT();
// Y 값 0x001d9480 {0}
(Y)을 삭제;
// Y 값 0x00008123 ??? {} 주소
변경된* Y = 100; // 예외를 제공합니다
}
내 질문 :
이왜 4 행의 코드가 예외를 제공하지 않습니다? 메모리가 제대로 _aligned_free에 의해 해제되지 않는다는 것을 의미합니까? 그렇다면 _aligned_malloc에 의해 할당 된 메모리를 어떻게 해제해야합니까?
1과 5의 경우 초기화되지 않은 값을 읽는 중입니다. 이는 버그입니다. 4와 8의 경우, 당신이 풀어 놓은 메모리에서 읽고 있습니다, 그것은 버그입니다. "왜 그 안에 버그가있는 코드는 안되니?"라는 일반적인 답은 "우리가 버그를 수정하는 이유는 무엇인가?" "버그가있는 코드는 예상대로 작동하지 않으며 버그를 수정하면 코드가 배고 있다". –
데이비드에게 감사드립니다. 나는 이것이 고쳐 져야 할 버그라고 지적했다. 이 질문에 대한 나의 의도는 정렬 된 메모리 (_aligned_free 이후)가 잘못된 메모리로 설정되지 않는 반면, y (삭제 후)의 경우에는 메모리가 가리키는 이유입니다. 컴파일러 또는 힙 deallocator 일 (더 많은 종류의 의견을 읽은 후) 나에게 보인다. 방금 그걸 확인하고 싶었어. 그게 전부 야. – coder