2016-12-04 22 views
0

構造体のフィールドを編集または印刷すると、メモリリークに関する前述のエラーが発生します。メモリリークはありません。 なぜですか?swig/pythonが 'uint32_t *'型のメモリリークを検出しました。デストラクタが見つかりませんでした。

ファイルrc_test.py:

import sys 
    import verbs_utils 
    import logging 
    logger = logging.basicConfig(level=logging.DEBUG) 

    class rc_pingpong(): 
     def __init__(self, link_partner_hostname=None): 
      self.attr = verbs_utils.ibv_qp_attr() 
      self.init_to_rts() 

     def init_to_rts(self): 
      self.attr = verbs_utils.ibv_qp_attr() 
      logging.debug("<DEBUG: init_to_rts>, self.attr = {}".format(self.attr)) 
      logging.debug("<DEBUG: init_to_rts>, self.attr.path_mtu = {}".format(self.attr.path_mtu)) 
      logging.debug("<DEBUG: init_to_rts>, self.attr.min_rnr_timer = {}".format(self.attr.min_rnr_timer)) 
      logging.debug("<DEBUG: init_to_rts>, self.attr.qp_state = {}".format(self.attr.qp_state)) 
      logging.debug("<DEBUG: init_to_rts>, self.attr.port_num = {}".format(self.attr.port_num)) 

      xx = self.attr.dest_qp_num 
      verbs_utils.set_intp_val(xx , 7) 
      verbs_utils.print_intp_val(xx) 
      self.attr.dest_qp_num = xx 
      #logging.debug("<DEBUG: init_to_rts>, +++++++++ self.attr.dest_qp_num = {}".format(self.attr.dest_qp_num)) 
      verbs_utils.print_intp_val(self.attr.dest_qp_num) 
      verbs_utils.print_intp_val(self.attr.dest_qp_num) 

ファイル:

struct ibv_qp_attr { 
     uint32_t  qkey; 
     uint32_t  rq_psn; 
     uint32_t  sq_psn; 
     uint32_t  dest_qp_num; 
    }; 

    void set_intp_val(uint32_t* p, int val) 
    { 
     *p = val; 
     printf("----------------------------------------------\n"); 
     printf("<DEBUG : xxxxxxset_intp_val>, p = %d\n", p); 
     printf("<DEBUG : xxxxxxset_intp_val>, val = %d\n", val); 
     printf("<DEBUG : xxxxxxset_intp_val>, *p = %d\n", *p); 
     printf("----------------------------------------------\n"); 
    } 
    void print_intp_val(uint32_t* p) 
    { 
     printf("----------------------------------------------\n"); 
     printf("<DEBUG : xxxxxxset_intp_val>, *p = %d\n", *p); 
     printf("<DEBUG : xxxxxxset_intp_val>, p = %d\n", p); 
     printf("----------------------------------------------\n"); 
    } 

出力verbs_utils.c:

---------------------------------------------- 
<DEBUG : xxxxxxset_intp_val>, p = 8431360 
<DEBUG : xxxxxxset_intp_val>, val = 7 
<DEBUG : xxxxxxset_intp_val>, *p = 7 
---------------------------------------------- 
---------------------------------------------- 
<DEBUG : xxxxxxset_intp_val>, *p = 7 
<DEBUG : xxxxxxset_intp_val>, p = 8431360 
---------------------------------------------- 
---------------------------------------------- 
<DEBUG : xxxxxxset_intp_val>, *p = 7 
<DEBUG : xxxxxxset_intp_val>, p = 8967344 
---------------------------------------------- 
swig/python detected a memory leak of type 'uint32_t *', no destructor found. 
---------------------------------------------- 
<DEBUG : xxxxxxset_intp_val>, *p = 7 
<DEBUG : xxxxxxset_intp_val>, p = 9753776 
---------------------------------------------- 
swig/python detected a memory leak of type 'uint32_t *', no destructor found. 

答えて

2

あなたのインターフェイスファイルの先頭に%include "stdint.i"を追加してみてください。

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 17211784) – Omi

関連する問題