提问人:kyluck 提问时间:9/30/2023 最后编辑:genpfaultkyluck 更新时间:9/30/2023 访问量:40
通过二进制字符串流调用 IMG_Load_RW() 时访问冲突?
Access violation when calling IMG_Load_RW() over a binary stringstream?
问:
我通过逐字节读取它们,为每个字节添加值 3 并将处理的字节发送回文件流来创建一些加密的 jpg 图像。该程序还可以通过执行反向操作(减去数字 3)将它们解密到原始文件中,并且一切正常。
现在,我想将加密的 jpg 图像读取到二进制字符串流中,对其进行解密,然后直接从该 jpg 字符串流内存数据创建 SDL Surface。
这是我写的函数:
bool b_get_SDLSurface_from_stream(string str_path, SDL_Surface** sdls_image)
{
ifstream ifstr_i;
stringstream ss_image_data(stringstream::out | stringstream::binary);
unsigned char uint8_b;
ifstr_i.open(str_path.c_str(), std::ios_base::binary);
if (!ifstr_i.is_open())
{
return false;
}
while (ifstr_i >> noskipws >> uint8_b)
{
uint8_b = uint8_b - 3;
ss_image_data << uint8_b;
}
if (ss_do.rdbuf()->in_avail() == 0)
{
return false;
}
int n_size = ss_image_data.str().size();
SDL_RWops* p_sdlrwops_image = SDL_RWFromMem(&ss_image_data, n_size);
if (p_sdlrwops_i == NULL)
{
return false;
}
*sdls_image = IMG_Load_RW(p_sdlrwops_image, 0);
if (*sdls_image == NULL)
{
return false;
}
ifstr_i.close();
return true;
}
...但是我收到一个错误,说在调用以下行的地方存在访问冲突:
*sdls_image = IMG_Load_RW(p_sdlrwops_image, 0);
答: 暂无答案
评论
SDL_Surface** sdls_image
--*sdls_image = IMG_Load_RW(p_sdlrwops_image, 0);
-- 在您在这里使用它之前,我们不知道何时、何地或如何分配、使用等。sdls_image
SDL_RWops
ss_image_data
ss_image_data().str()
&ss_image_data
是指向字符串流对象的指针,而不是指向它所保存的数据的指针。将数据存储在而不是字符串流中会是一个更好的主意。vector<uint8_t>
string s = ss_image_data.str()
const char* c = s.c_str()
int n_size = s.size()
SDL_RWops* p_sdlrwops_image = SDL_RWFromMem(&c, n_size)