求助:Linux下使用交易接口出现double free问题

Discussion in 'CTP' started by skyline, Oct 17, 2011.

  1. 测试linux下CTP的trader API时,每次退出程序时程序报错
    double free or corruption

    测试MD API没有问题,用的是相似的程序架构。

    主要代码如下
    Code:
    #include "main.h"
    
    using namespace std;
    
    void *TraderThread(void *arg)
    {
        cout<< "Trader thread start" <<endl;
        char TRADER_FRONT_ADDR1[] = "tcp://58.246.49.132:41205";
        char TRADER_FRONT_ADDR2[] = "tcp://58.246.49.132:41205";
        char TRADER_FRONT_ADDR3[] = "tcp://58.246.49.132:41205";
        pTraderUserApi = CThostFtdcTraderApi::CreateFtdcTraderApi();
        CTraderSpi* pUserSpi = new CTraderSpi();
        pTraderUserApi->RegisterSpi((CThostFtdcTraderSpi*)pUserSpi);
        pTraderUserApi->SubscribePublicTopic(THOST_TERT_QUICK);
        pTraderUserApi->SubscribePrivateTopic(THOST_TERT_QUICK);
        pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR1);
        pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR2);
        pTraderUserApi->RegisterFront(TRADER_FRONT_ADDR3);
        pTraderUserApi->Init();
        pTraderUserApi->Join();
    }
    
    int main(void)
    {
        pthread_t TraderThraedId;
        int ret;
    
        ret = pthread_create(&TraderThraedId, NULL, TraderThread, NULL);
        if(ret!=0){
            cout<< "creat trader thread failed\n" <<endl;
            return 0;
        }
    
        cin.get();
    
        return 0;
    }
     
  2. 终于发现是链接了行情的链接库造成的,只链接交易就没问题。

    但是很奇怪,虽然链接了行情库,但我没有任何行情代码,应该是不会启动行情库的啊?
     
  3. 我用Linux,也曾经关注CTP,但对CTP基本还是一头雾水:比如在哪能接收到CTP数据?怎样能通过CTP在期货公司下单?好像不是很多公司支持CTP?
    请问Skyline兄可否分享一下CTP的代码并介绍一下用法?
     
  4. ctp接口还是相当友好的,多看看样例代码。
    现在开通ctp的公司已经很多了,可以邮件或msn详聊。
     
  5. 我也同样出现这个问题。。。
     
  6. 经过反复测试,应该可以确认是上期的问题。

    只写helloworld程序,然后链接库,其他啥事都没做也报错。
     
  7. 我猜原来本来是一个ThostUserApi一个库,然后上期硬是把人家拆分为两个库,在md屏蔽了很多功能,比如查询合约信息的功能,还有ApiStruct.h里面一些没有用到的struct。。但是md和td都有共用的变量(global pointers?),于是在两个都release的时候就出现了这种问题。
     
  8. 我猜也是。
     
  9. 我在用,两个lib都用到了。

    两个lib有共有的数据,但是for linux的lib好像没有用好tls,只是依赖pthread做管理,所以一个thread里release会影响到另一个thread。

    不用release好像没什么问题,下单、收行情都ok。
     
  10. 退出程序的时候应该会报double free 吧?
     
  11. 同样问题,退出的时候会double free
     
  12. 希望上期能够解决一下API double free的问题
     
  13. 这个问题解决了没有呀,我也沾个光
    Linux myhost 3.2.6-1-ARCH
    如果linux能交易的话。就没 必要装xp虚拟机了