2012-02-04 40 views
0

== 11260 ==大小的無效寫入4爲什麼valgrind會輸出文件路徑而不是錯誤的行號?

== 11260 ==在0x402872:b2_createPair(在/ home /大衛/文檔/編程/ 366終端/ mainout

== 11260 =通過= 0x402BE9:b2_populateBigBucket(在/ home /大衛/文檔/編程/ 366端子/ mainout)

== 11260 ==由0x401993:doTads_b2(tads.c:82)

== 11260 == by 0x400E82:main(main.c:159)

== 11260 ==地址0x51d0318是0字節之後大小爲8的一個塊alloc'd

==在0x4C28F9F 11260 ==:malloc的(vg_replace_malloc.c:236)

== 11260 ==通過0x402866:b2_createPair(在/ home /大衛/文檔/編程/ 366終端/ mainout)

== 11260 ==由0x402BE9:b2_populateBigBucket(在/ home /大衛/文檔/編程/ 366終端/ mainout)

== 11260 == by 0x401993:doTads_b2(tads.c:82)

== 11260 ==由0x400E82:主(main.c中:159)

我不習慣這一點 - 它通常會給我那些前兩行一個行號爲好。

而且 - 如果你喜歡我 - 幫我不能工作了,爲什麼它不喜歡這樣的malloc -

pair2* b2_createPair(int nodeFrom, int nodeTo, int distance) 
{ 
    pair2* p = malloc(sizeof(pair2*)); 
    if (p==NULL) 
    { 
     printf("Malloc was NULL\n"); fflush(stdout); 
    } 
    else 
    { 
     p->distance = distance; 
     p->nodeFrom = nodeFrom; 
     p->nodeTo = nodeTo; 
    } 

    return p ; 


} 

(好 - 只是注意到P->節點到= nodeFrom錯誤 - 但這並不影響結果

的結構看起來像

struct pair2_t 
{ 
    int nodeFrom; 
    int nodeTo; 
    int distance; 
    struct pair2_t *previous; 
    struct pair2_t *next; 
}; 

typedef struct pair2_t pair2; 
+0

也許測試malloc的結果是否爲NULL。 – 2012-02-04 06:43:43

+0

是的,那不是。 – dwjohnston 2012-02-04 06:55:27

+0

考慮使用fprintf打印到stdout和stderr。不回答你的問題,但它可能會使你的代碼更清潔。 – 2012-02-04 07:00:50

回答

0

嘗試:

pair2 *p = malloc(sizeof(pair2)); 
... 

請務必在某個時間點free()

+0

謝謝。一個腦筋急轉彎的位置太長了。再次感謝。 :) – dwjohnston 2012-02-04 07:30:38

相關問題