いくつかの整数をキューに格納しようとしています。このキューは基本的に、整数 (またはすべての値) をバイト単位で格納する固定サイズの char 配列です。
class fixed_size_queue{
char *buffer;
unsigned int head;
int tail;
q_typeinfo tinfo;
public:
fixed_size_queue(q_typeinfo tinfo_):tinfo(tinfo_) {
buffer = new char[MAX_SIZE*tinfo.get_size()];
head = 0;
tail = -1;
}
char* pop() {
char* value = buffer+head;
head++;
return value;
}
void push(char* value) {
tail++;
buffer[tail] = *value;
cout<<"pushing value = "<<(int)*value<<endl; //line 22
}
};
このキューに値をプッシュしようとするときは、次を使用します。
void push_q(void* value){
q.push(value);
}
上記で、0 から 127 までの値をプッシュすると、正しくプッシュおよびポップされます。値 128 をプッシュすると、22 行目で「プッシュ値 -128」が出力されます。129 を押すと -127 が出力され、再び 127 に到達してラップアラウンドするまで続きます。
各整数のサイズは、キューの配列では 8 ですが (何らかの理由で切り上げています)、4 で試してみましたが、同じ奇妙なエラーが表示されます。
また、値をプッシュまたはポップするときに「値」をキャストしてchar *にコピーするためにreinterpret_castを使用しようとしましたが、同じことが起こります。誰かが何か間違っていると思いますか?ありがとうございました!
--更新: 最後に、問題は型ではありませんでした。任意の変数のバイトを格納したかっただけです。たとえば、整数は (4) 文字バイトに分割し、配列に格納する必要があります。必要だったのは、整数のデータを char 配列にコピーすることでした! 上記は、毎回 1 バイトしかコピーされないため、機能しませんでした。また、head と tail の増分は +=sizeof(int) にする必要があります。