私はC++の初心者で、何らかの動作を理解できません。 以下の機能があり、この場合は機能します。C++可変可視スコープとストリム
bool Network::doRequest(HTTPRequest& request, string path, string content) {
HTTPResponse response;
istream* respStreamPtr;
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
if (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED)
{
credentials->authenticate(request, response);
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
}
if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
Logger::dumpStream(*respStreamPtr);
}
return true;
}
しかし、もし移動列ロガー:: dumpStream(* respStreamPtr)。 ifブロックの。このように:
if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
}
Logger::dumpStream(*respStreamPtr);
これは動作が停止しています! 条件(response.get( "Content-Encoding")== "deflate")は常にtrueです。 ブロック内の可視性ストリームのコンテンツに問題があります。 しかし私は何が間違っているのか理解できません。 お願いします。
P.S.どちらの場合も例外はありません。 2番目のケースでは、ファイルsomefile.txtのデータはまったくありません。 最初のケースのファイルsomefile.txtには、httpリクエストからのデータが膨らんでいます。
void Logger::dumpStream(std::istream& inputStream) {
fstream outStream("somefile.txt", ios_base::trunc | ios_base::out | ios_base::binary);
outStream << inputStream.rdbuf();
outStream.close();
}
ポインタそのものがぶら下がり、実際は_immediately_になります。 VS以外のコンパイラは、この非標準コードを禁止します。一時的な人の住所を取ってはいけません。 –
すみません、ありがとうございます。 質問をメインの質問で更新してください。 新しいステートメントinflater = newが追加されました。 これで動作します。 しかし、今私はメモリリークを持っている、私はオブジェクトを膨らませて削除しないでください? – greenif
@greenif質問を編集しないでください。質問に答えました。ご質問がありましたら、新しい投稿をしてください。 –