У меня проблема с попыткой сжатия данных файла. Все работает до вызова сжатия, но это не сам вызов сжатия, поскольку перед ним возникает segfault. Показаны мой код будет сделать гораздо яснее:C++ получает ошибку seg перед тем, как ввести функцию
std::cout << "FILENAME: ";
std::cin >> filename;
if(!fileExists(filename))
{
std::cout << "ERR: FILE NOT FOUND." << std::endl;
continue;
}
std::cout << "Compressing file data...";
writeFile(filename, zlib_compress(readFile(filename)));
std::cout << " Done." << std::endl;
В функции zlib_compress ...
std::string zlib_compress(const std::string& str)
{
std::cout << "DEBUG" << std::endl;
z_stream zs; // z_stream is zlib's control structure
memset(&zs, 0, sizeof(zs));
if (deflateInit(&zs, 9) != Z_OK)
std::cout << "deflateInit failed while compressing." << std::endl;
zs.next_in = (Bytef*)str.data();
zs.avail_in = str.size(); // set the z_stream's input
int ret;
char outbuffer[1073741824];
std::string outstring;
// retrieve the compressed bytes blockwise
do
{
zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
zs.avail_out = sizeof(outbuffer);
ret = deflate(&zs, Z_FINISH);
if (outstring.size() < zs.total_out)
{
// append the block to the output string
outstring.append(outbuffer, zs.total_out - outstring.size());
}
} while(ret == Z_OK);
deflateEnd(&zs);
if(ret != Z_STREAM_END) // an error occurred that was not EOF
{
std::ostringstream oss;
oss << "Exception during zlib compression: (" << ret << ") " << zs.msg;
std::cout << oss.str();
}
return outstring;
}
Я знаю, я знаю, что функция должна работать, я просто C & P'd откуда-то попробовать.
Но дело это:
std::cout << "DEBUG" << std::endl;
является никогда называется. Компилятор говорит, что отход от seg происходит отсюда:
std::string zlib_compress(const std::string& str)
> {
Но почему ...? Он работал раньше. Я просто не знаю, что пошло не так!
Редактировать: Выход отладчика.
#0 00000000 0x00402cbb in __chkstk_ms() (??:??)
#1 004013BE zlib_compress(str=...) (C:\Users\***\Documents\Work\Programming\Compressor\z.cpp:5)
#2 00401DDA _fu15___ZSt4cout() (C:\Users\***\Documents\Work\Programming\Compressor\main.cpp:80)
Как определить 'имя файла '? –
Перед этим кодом, как 'std :: string filename;' – 2013-02-28 01:32:48
Можете ли вы запустить его через отладчик? С чем вы работаете? –