Hell'o 내 자신의 동적 배열 (벡터) 클래스를 만들고 싶지만 내가 가리키는 주소에 메모리를 할당하는 방법을 모른다. 함수에서 나는 다음과 같은 라인을 추가했습니다. int * object = new (this->beginning + this->lenght) int (paramValue);
그러나 Visual Studio에서 "주어진 연산자로 new 연산자를 호출 할 수 없습니다"라는 오류 메시지를 표시합니다. 작동하려면 어떻게해야합니까? 어떤 문의는 교환 원에게 보내야합니까?내가 가리키는 andress에 동적으로 메모리를 할당하는 방법은 무엇입니까?
답변
(나는 .... 당신의 질문을 이해 잘 모르겠지만,)
당신은 placement new 연산자를 사용하는 (하지만 것을 필요로하지 않는 것 같은 <vector>
을 구현하기 위해) 할 수 있습니다. 그럼 당신은해야합니다 #include <new>
하지만 당신은 아마 필요하지 않습니다. 생성자에서 일반 new
을 호출하고 소멸자에서 일반 delete
을 호출하면됩니다. 뭔가가 int*arr = new int[length];
(생성자에서) 이상 delete[] arr;
(소멸자에서).
는 (당신이 뭔가를 오해하는 것을 본다, 나는 좋은 C++ programming 책을 읽고 지출 며칠 추천)
감사합니다. #include
강력하게 믿어서는 안됩니다. –
데스크톱 사용자 권한에서 주소는 가상입니다. 물리적 주소에 액세스하는 데 약간의 노력이 필요합니다. –
내가
불충분 한 정보를 가리 주소에 메모리를 할당하는 방법 - 어떤 종류의 시스템인가? 맞춤 하드웨어? OS?
데스크톱에서는 2 단계를 사용할 수 있습니다. 그런 다음 캐스트로, 'myMemoryBlock'를 사용하여 "당신이 가리"주소에서 새 배치를 사용하여 찬찬히 수
uint8_t* myMemoryBlock = new uint8_t[1000]; // 1000 byte block
: 당신은 같은 것을 사용하여 바이트의 블록을 할당합니다. 동적 메모리 시스템이 방법을 사용할 수있는 바탕 화면에서
...하지만, 사용자 정의 형에게 단지 새로운 유형을 어떤 방법을 만들고, 동적 메모리 가을 어디 수 있도록 계획하는 경우 myMemoryBlock에 배치하는 것과 반대 일 수 있습니다.
바탕 화면에는 사용자 권한 수준 실행 파일이 '새'권한으로 액세스 할 수있는 메모리가 없습니다. 다른 모든 메모리는 보호됩니다.
mmap on Linux는 장치 또는 파일을 실행 파일 메모리 범위에 매핑합니다. 이러한 장치에 익숙하지 않지만 mmap을 파일과 함께 사용했습니다. 사용자 권한 수준의 작업은 일반적으로 기타/특수 메모리 액세스 차단 -
업데이트는
주 1 2017/03/19.
주 2 - 위의 'myMemoryBlock'과 같은 메모리 주소는 실제가 아닌 가상 주소입니다. 여기에는 코드 주소, 자동 메모리 주소, 동적 메모리 주소가 포함됩니다. 프로세서에 메모리 관리 하드웨어가 지원되는 경우 코딩 작업을 통해 실제 주소 나 메모리 등에 액세스 할 수 있습니다.싱글 보드 컴퓨터 (SBC)에
는 (함께 또는 OS없이) 나는 당신이 '할당'하고자하는 주소가가 설정 한 '동적'메모리에 수 없음을 기대 보드 지원 패키지 (BSP).
다른 사람 (건축가)이이 특별한 종류의 임베디드 시스템 (SBC)에서이 '특수한'메모리를 다른 용도로 사용되지 않는 주소 범위 (즉 동적 메모리의 일부가 아닌)에 '매핑'했습니다. 여기에서는 주소가 무엇인지 알아 내고 uintXX_t 값을 적절한 유형의 포인터로 캐스팅하여 사용합니다. 예 :
myDataType* p = reinterpret_cast<myDataType*>(premappedAddress);
자세한 내용은 임베디드 시스템을 논의하는 다른 사이트를 찾아야합니다.
[최소, 완전하고 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 만들어보십시오. 그리고 해당 코드로 질문을 편집 할 때 편집하지 않고 완전하고 완전한 오류 메시지를 포함하십시오. –
'int * object = new int [length];'무엇이 잘못 되었나요? 나는 당신이 달성하고자하는 것을 얻지 못합니다. 정교하게 제발 주시겠습니까? – Fureeish
기본적으로 컴파일러의'std :: vector '가 어떻게 동작하는지보고 싶을뿐입니다. 아니면 한 걸음 더 나아가'std :: vector'를 복사하는 대신에 사용하십시오 :) –