Mein Code erstellt und läuft gut bis zum eigentlichen Ende des Programms, wenn es ein Problem mit Zeile 909 von xmemory0 hat.xmemory0 Ausnahme bei void Freigabe
Mein Code ist der Anfang eines sehr einfachen Twitter-Clients, das Problem trat nur wirklich auf, als ich anfing, meine Klassen zu bauen. Ich bin zu 99% sicher, dass es mit meinem Vektor zu tun hat, aber ich habe noch nicht wirklich etwas damit gemacht, also bin ich mir nicht sicher. Wenn ich online nach diesem Fehler suche, kann ich keine ähnlichen Probleme finden. Da ich die Twitcurl-Bibliothek benutze, wäre es sehr schwierig und unfair, jemanden zu bitten, alles zu kompilieren, nur um meinen Code zu kompilieren, aber hier ist nur, um zu sehen, was ich habe das ist meine Header-Datei mit allen meinen Klassen
#pragma once
#ifndef CLASSES_H
#define CLASSES_H
#include<string>
#include<vector>
#include"rapidjson/document.h"
#include"rapidjson/reader.h"
#include"rapidjson/writer.h"
#include"rapidjson/stringbuffer.h"
#include "rapidjson/rapidjson.h"
#include"rapidjson/prettywriter.h"
using namespace rapidjson;
class tweet {
public:
tweet();
~tweet();
std::string userName;
std::string userid;
std::string tweetData;
};
class timeline {
public:
std::vector<tweet> tweets;
timeline();
~timeline();
void set_userTimeline(std::string);
};
class user:public timeline {
public:
user();
std::string name;
std::string screenName;
std::string user_ID;
timeline userTimeline;
void loadUserData(std::string);
std::string get_name();
std::string get_screenName();
std::string get_user_ID();
void set_name(std::string);
void set_screenName(std::string);
void set_user_ID(std::string);
~user();
};
#endif /*CLASSES_H*/
meine Implementierungsdatei
#include "classes.h"
tweet::tweet()
{
}
tweet::~tweet()
{
}
timeline::timeline()
{
}
timeline::~timeline()
{
}
void timeline::set_userTimeline(std::string)
{
}
user::user()
{
}
std::string user::get_name()
{
return name;
}
std::string user::get_screenName()
{
return screenName;
}
std::string user::get_user_ID()
{
return user_ID;
}
void user::set_name(std::string n)
{
name = n;
}
void user::set_screenName(std::string sn)
{
screenName = sn;
}
void user::set_user_ID(std::string id)
{
user_ID = id;
}
void user::loadUserData(std::string input)
{
bool userLoaded = false;
std::string json;
json = input;
Document d;
d.Parse(json.c_str());
assert(d.IsObject());
assert(d.HasMember("id_str"));
assert(d.HasMember("name"));
assert(d.HasMember("screen_name"));
assert(d["name"].IsString());
assert(d["screen_name"].IsString());
assert(d["id_str"].IsString());
set_user_ID(d["id_str"].GetString());
set_name(d["name"].GetString());
set_screenName(d["screen_name"].GetString());
}
user::~user()
{
}
und mein Haupt
#include<string>
#include<iostream>
#include "twitcurl.h"
#include "curl/curl.h"
#include"classes.h"
FILE _iob[] = { *stdin, *stdout, *stderr };
extern "C" FILE * __cdecl __iob_func(void)
{
return _iob;
}
int main(int argc, char *argv[])
{
///first screen login or exit
std::string choice;
std::cout << "Press" << std::endl << "1 to login" << std::endl << "2 to exit" << std::endl;
std::cin >> choice;
int intChoice = std::stoi(choice, nullptr);
if (intChoice == 0)
{
return 0;
}
else if (intChoice == 1)
{
/*choice = "";
intChoice = 0;*/
std::string userName = "Jordash90";
std::string passWord = "*******";
/*std::cout << "Please enter your twitter username->" << std::endl;
std::cin >> userName;
std::cout << "Please enter your twitter password->" << std::endl;
std::cin >> passWord;*/
twitCurl twitterObj;
std::string tmpStr, tmpStr2;
std::string replyMsg;
char tmpBuf[1024];
/* Set twitter username and password */
twitterObj.setTwitterUsername(userName);
twitterObj.setTwitterPassword(passWord);
//SETMYKEYS AND SECRET OAUTHSTUFF
twitterObj.getOAuth().setConsumerKey(std::string("bHnCXjV*************47Jk"));
twitterObj.getOAuth().setConsumerSecret(std::string("fmjE*********VrzK7JoZWg28NECB0Eu5xsAQxXbOYdjjA"));
//
std::string oAuthUrl;
twitterObj.oAuthRequestToken(oAuthUrl);
twitterObj.oAuthHandlePIN(oAuthUrl);
twitterObj.oAuthAccessToken();
std::string myAccessTokenKey;
std::string myAccessTokenSecret;
twitterObj.getOAuth().getOAuthTokenKey(myAccessTokenKey);
twitterObj.getOAuth().getOAuthTokenSecret(myAccessTokenSecret);
//save these for later
std::ofstream tokenKeySave;
std::ofstream tokenSecretSave;
tokenKeySave.open("twitterClient_token_key.txt");
tokenSecretSave.open("twitterClient_token_secret.txt");
tokenKeySave.clear();
tokenSecretSave.clear();
tokenKeySave << myAccessTokenKey.c_str();
tokenSecretSave << myAccessTokenSecret.c_str();
tokenKeySave.close();
tokenSecretSave.close();
/////actually trying to do something with this
user currentUser;
/* Account credentials verification */
if (twitterObj.accountVerifyCredGet())
{
twitterObj.getLastWebResponse(replyMsg);
currentUser.loadUserData(replyMsg);
std::cout << "User name: " << currentUser.get_name() << std::endl;
std::cout << "User ID: " << currentUser.get_user_ID() << std::endl;
std::cout << "User screen name: " << currentUser.get_screenName() << std::endl;
std::cout << "login successful! :) " << std::endl;
}
else
{
twitterObj.getLastCurlError(replyMsg);
printf("\ntwitterClient:: twitCurl::accountVerifyCredGet error:\n%s\n", replyMsg.c_str());
}
}
system("PAUSE");
return 0;
};
Es bedeutet, dass Sie den Speicher irgendwo beschädigt haben. Sehr verdächtig ist 'FILE _iob [] = {* stdin, * stdout, * stderr};'. 'FILE' Objekte sind nicht kopierbar. Die Neudefinition der internen Funktion "__iob_func" verlangt ebenfalls Probleme. –
Ist das die kleinste mögliche Form Ihres Codes, die das Problem reproduzieren wird? Welche Eingaben verwenden Sie, um das Problem zu reproduzieren? –
@RaymondChen Die Datei _iob Teil ist notwendig, um die Bibliothek im Arbeiten mit Visual Studio 2015 zu bekommen, da es ziemlich alt ist und ursprünglich auf VS06 oder etwas verwendet wurde. Sie können den Fehler nicht reproduzieren, es sei denn, Sie erstellen libcurl und twitcurl, was einige Zeit dauern würde. Was ich mich wundere ist, wenn dieser Fehler in irgendeiner Weise mit der Tatsache in Zusammenhang stehen könnte, dass meine Benutzerklasse eine Instanz der Zeitleiste hat und meine Zeitleistenklasse ein Vektor von Tweets ist? Dies begann erst, als ich die letzten beiden Klassen in meinen Code einführte. – J0rdy