2016-03-20 7 views
0

xmemory0の909行に問題があると、プログラムの実際の終了まで、自分のコードがビルドされ、正常に実行されます。私は私のクラスを構築し始めたときxmemory0 exception in void deallocate

void deallocate(pointer _Ptr, size_type _Count) 
     { // deallocate object at _Ptr, ignore size 
     _Mybase::deallocate(_Ptr, _Count); 
     } 

私のコードは非常に基本的なTwitterクライアントの開始で、問題は、実際に発生しました。私は99%が私のベクトルと関係があると確信していますが、私は本当にまだそれで何もしていないので、わかりません。このエラーをオンラインで検索すると、同様の問題が見つかりません。私がtwitcurlライブラリを使用しているので、コードをコンパイルするためにすべてをビルドするように誰にも依頼するのは本当に難しくて不公平ですが、ここでは私が持っているものを見ることができます これはすべて私のクラスのヘッダファイルです

#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*/ 

私の実装ファイル

#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() 
{ 

} 

と私のメイン

#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; 

}; 
+0

これは、どこかでメモリが破損したことを意味します。非常に疑わしいのは 'FILE _iob [] = {* stdin、* stdout、* stderr};'です。 'FILE'オブジェクトはコピーできません。内部関数 '__iob_func'を再定義することも問題を求めています。 –

+0

これは問題を再現する可能な限り小さなコードですか?問題を再現するためにどのようなインプットを使用していますか? –

+0

@RaymondChenファイル_iobは、ビジュアルスタジオ2015で作業することを使用してライブラリimを取得するために必要です。これはかなり古く、最初はvs06などで使用されていました。 libcurlとtwitcurlをビルドしないとエラーを再現することはできません。私のユーザクラスにタイムラインのインスタンスがあり、タイムラインクラスがつぶやきのベクトルであるという事実に、このエラーが何らかの形で関連している可能性があるのであれば、私は疑問に思います。これは後半の2つのクラスを自分のコードに導入したときに始まりました。 – J0rdy

答えて

0

問題は、私は時間につぶやきクラスのパブリックを宣言していないためでしたラインクラス。

+0

それは意味をなさない。コンパイル時にエラーが発生し、実行時エラーにはなりませんでした。また、あなたが投稿したコードでは、 'tweet'クラスはすでに完全に公開されています。 –

+0

それはまだそれを修正しました。 – J0rdy

+0

それから、「tweetクラスをタイムラインクラスに公開する」ということを理解できないかもしれません。ツイートクラスとタイムラインクラスは兄弟であるため、お互いにパブリックではありません。彼らは絶対的な意味でただの公的なものです。問題を解決するために変更された実際のコード行を共有してください。 –

関連する問題