C++ 向量<;PBYTE>;正在损坏c++;

C++ 向量<;PBYTE>;正在损坏c++;,c++,vector,printf,byte,C++,Vector,Printf,Byte,我知道PBYTE是unsigned char*from 我正在调用一个更新数据和数据大小的函数 我在调用函数后打印数据,但是一旦我打印了存储所有数据的向量,我就不会得到相同的值 数据是否可能已损坏 这是一个内部编写的函数,不是开源的 SerializeEvent(uz PCWSTR EventName中的uu), __输出计数(数据大小)字节和数据, __out ULONG和DataSize){} 此函数接收一个字段并对其进行序列化,data基本上是存储序列化事件名称的缓冲区,dataSize

我知道
PBYTE
unsigned char*
from

我正在调用一个更新
数据
数据大小
的函数

我在调用函数后打印数据,但是一旦我打印了存储所有数据的向量,我就不会得到相同的值

数据是否可能已损坏

这是一个内部编写的函数,不是开源的

SerializeEvent(uz PCWSTR EventName中的uu),
__输出计数(数据大小)字节和数据,
__out ULONG和DataSize){}
此函数接收一个字段并对其进行序列化,
data
基本上是存储序列化事件名称的缓冲区,
dataSize
是该名称的大小

PBYTE data=NULL;
ULONG dataSize=0;

int main(){
    vector<PBYTE> dataVector;
    vector<ULONG> dataSizeVector;
    
    for(int i=0;i<10;i++){
    
        serializeData(event,data,dataSize);
        printf("%02x ",data); ///----->a
        dataVector.push_back(data);
        dataSizeVector.push_back(dataSize);

    }
    //just want to print the contents of this vector to verify
    for(int i=0;i<dataVector.size();i++){
        printf("%02x ",dataVector.at(i)); ----> b
    }
    
}
PBYTE数据=NULL;
ULONG-dataSize=0;
int main(){
向量数据向量;
矢量数据采集器;
对于(int i=0;ia
数据向量。推回(数据);
dataSizeVector.push_back(dataSize);
}
//只想打印此向量的内容以进行验证
对于(int i=0;i b
}
}
第一个
for
循环的打印与第二个
for
循环的打印不匹配。我是否遗漏了什么

但是对dataSizeVector执行相同的操作会打印出相似的值…

两个循环都打印出不正确的数据。
printf(“%02x”,…);
被赋予一个
字节*
指针作为
%x
的输入值,但是
%x
需要一个整数而不是指针

与在中一样,您可以使用
%x
打印单个字节,而使用
%p
打印指针

尝试类似以下内容:

int main() {
    vector<PBYTE> dataVector;
    vector<ULONG> dataSizeVector;
    
    for(int i = 0; i < 10; ++i) {
        PBYTE data = NULL;
        ULONG dataSize = 0;
        SerializeEvent(event, data, dataSize);
        printf("%p", data);
        for(ULONG j = 0; j < dataSize; ++j) {
            printf(" %02x", data[j]);
        }
        printf("\n");
        dataVector.push_back(data);
        dataSizeVector.push_back(dataSize);
    }

    //just want to print the contents of this vector to verify
    for(size_t i = 0; i < dataVector.size(); ++i) {
        PBYTE data = dataVector[i];
        ULONG dataSize = dataSizeVector[i];
        printf("%p", data);
        for(ULONG j = 0; j < dataSize; ++j) {
            printf(" %02x", data[j]);
        }
        printf("\n");
    }    
}
intmain(){
向量数据向量;
矢量数据采集器;
对于(int i=0;i<10;++i){
PBYTE数据=空;
ULONG-dataSize=0;
序列化事件(事件、数据、数据大小);
printf(“%p”,数据);
对于(ULONG j=0;j

我建议你读一下如何
printf()
确实有效。

嗨@Someprogrammerdude。序列化函数需要PBYTE&data,所以这是一个双指针?在你下一个问题之前,请花点时间阅读,阅读so,阅读,以及。并始终包括一个适当的。嗨@Remy我尝试了你的建议,感谢你详细的回答:)虽然指针值是相同的(因此我知道它们指向相同的地址),但数据不是…:(93 b6 53用于第一个和70 8e ce ad..这不是很奇怪吗?@C编码如果数据正在更改,很可能是由于
序列化数据
中的问题。分配给其
数据
参数的指针指向什么?该指针指向的对象是如何分配的?@C编码如果两个循环中的指针相同,则数据应该是相同的同样,假设序列化正确地分配和填充了内存。因此,您可能仍然打印错误的数据。正如您所看到的,两个循环产生相同的输出。