2011年1月3日 星期一

assert用法

作者: wlsabcd (我不會C++) 看板: C_and_CPP
標題: Re: [問題] assert用法
時間: Mon Apr  9 13:48:15 2007

※ 引述《ntouckcm (知足常樂)》之銘言:
: 請問各位高手怎麼用 assert 敘述測試 {記憶體錯誤檢查}
: 我有點看不太懂老師這樣說的意思!!!

按照標準說法,assert是一個MACRO,

#define assert(X)   ....

他的用法是X是一個運算式,當此運算是結果為0 (NULL)時

assert會做以下幾件事:

從stderr印出以錯誤訊息,並呼叫abort() function來結束程式。

例如:

#include
#include
#include

void foo(int *q)
{
    int *p;

    assert(p = q);
    printf("Checkking OK\n");
}

int main(void)
{

    int *ptr = NULL;

    ptr = (int *)malloc(sizeof(int));
    /* ptr 有位址,可以正確執行 */
    foo(ptr);

    free(ptr);
    /* ptr 位址不為NULL,雖然free掉但不為NULL,assert"不"會偵錯到錯誤 */
    foo(ptr);

    ptr = NULL;
    /* ptr 位址為NULL,assert會偵錯到錯誤 */
    foo(ptr);

    return (0);
}

結果自己動手做 :)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.27.34

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.