2012-05-22 3 views
2

C++에서 동적 포인터를 파일에 쓰려고합니다. 동적 포인터의 크기 가져 오기 C++

byte* buffer; 

그런 다음 CPP 파일에, 나는 그것을 할당 :
buffer = new byte[1000]; 

그러나 크기가 동적 할당에 1000보다 큰 것

이 헤더 파일 내 선언이다.

은 그럼 파일에 쓸 :

ofstream의 myfile을;

버퍼 길이를 1000으로 지정하면 1000 이후의 나머지 바이트는 삭제됩니다. sizeof (buffer)를 사용하면 1 바이트 만 쓰여집니다.

버퍼의 동적 크기는 어떻게 얻을 수 있습니까? 사전에

감사합니다.

+1

무엇이 좋지 않습니까? – olidev

+1

은 C++ _style_이 아니며 일반적으로 배열의 크기를 포인터에서 요소로 가져올 수 없습니다. – sehe

+3

전역 변수,'new []','MAGIC_BUFFER_SIZE' 불필요한 캐스트? – Puppy

답변

11

간단한 :

std::vector<byte> buffer; 
buffer.resize(1000); 
myfile.write(&buffer[0], buffer.size()); 
+0

질문자의 코드에'char *'에 대한 캐스트가 필요하다면,'byte'는 아마'unsigned char'입니다. –

+0

왜 std :: vector 버퍼 (1000); – Nawaz

+0

@Nawaz : 문제의 독서는 '버퍼'의 정의와 크기가 다른 곳에서 일어 났음을 암시합니다. 당신이 그들을 결합 할 수 있다면, 정말로해야합니다. – MSalters

0

버퍼의 크기는 그것은 당신이 사용하는 경우 "새로운"가끔 더 많은 메모리를 할당 할 수 있다는 사실 1000입니다하지만 다음 "새"를 고정하기 위해 수행된다. 따라서 1000 바이트 이후에 할당 된 다른 모든 메모리는 미래의 "새로운"메모리에 사용될 수 있습니다.
하단에는 1000 바이트 이상 있다고 가정 할 수 없으며 가정해야합니다.

+0

_' 그러나 동적 할당에서 크기가 1000보다 커집니다. '_ – sehe

+0

A. 더 커질 수 있습니다. B. 나는 당신이 그렇게하고 싶어하는 이유를 생각할 수 없다. C. 가능한 경우라도 당신은 단지 거기서 쓰레기가있을뿐입니다. –

+0

나는 그 요점을 놓치고 있다고 생각합니다. '1000'은 샘플 일 뿐이며, 실제 코드는 동적으로 할당 된 배열을 가리키는 char *를 얻습니다. 내 해석입니다. 네, 질문 문구가 틀립니다 – sehe