1

以下のコード サンプルの次の 3 行で lint がエラーを出さないのはなぜですか?

timeout(&a);
timeout(&b);
if (pthread_create(&t1, NULL, timeout, (void*) &a) != 0)

ローカル変数へのポインターを渡すことは常に安全ではないと考えられていませんか? そして、両方の変数はローカルです...

#include <stdio.h>
#include <pthread.h>

static void* timeout(void* c)
{
    int d = *(*((int**)c));
}

static void sendMessage(int* a)
{
    timeout(&a);
    int* b = new int(2);
    timeout(&b);

    pthread_t t1;
    if (pthread_create(&t1, NULL, timeout, (void*) &a) != 0)
    {
        printf("pthread_create() error\n");
    }
}

int main() 
{
    printf("Running..\n");
    int* e = new int(1);
    sendMessage(e);
    delete e;
    return 0;
}

ヨアヒム

4

2 に答える 2

1

ローカル変数のアドレスを関数に渡すことは非常に有効で一般的です。間違っている場合もありますが、リントが文句を言うようなものにすると、過剰な量のノイズ/誤検知が生成されます。

于 2012-11-23T16:52:17.087 に答える