0

C99 gcc

このエラーが発生し続けます。メインの外に構造体があります。メイン内では、calloc を使用してスタックに割り当てようとしています。何が悪いのか分からないようです。

アドバイスありがとうございます。

エラー: ')' トークンの前に式が必要です

/* global */
struct port_data_t                                                                      
{                                                                                       
    size_t task_id;                                                                     
    pthread_t *thread_id;                                                               
    size_t start_port;                                                                  
    size_t number_ports;                                                                
} *port_data;                                                                           


/* main function */
struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));
4

5 に答える 5

1

これを変更してみてください:

struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));

これに:

port_data = (struct port_data_t*) calloc(4, sizeof(*port_data));

少しうまくいくかもしれません。グローバル構造体として宣言している場合はport_data、それをとして再宣言する必要はありませんstruct port_data_t。GCCはすでにそれを知っているはずです。もちろん、私がそれをどのように行うかはこれです:

port_data = (struct port_data_t*) calloc(4, sizeof(struct port_data_t));

しかし、私は変数をに入れるのは好きではありませんsizeof()。私は習慣から、そこにタイプを入れることに固執しようとしています。さらに、ポインタをどの程度正確に逆参照する必要があるかについてのあいまいさを解決します。この場合、これはあなたをつまずかせます。

于 2009-03-09T05:51:56.607 に答える
1
#include <malloc.h>
#include <pthread.h>

typedef struct port_data_t {
    size_t task_id;
    pthread_t *thread_id;
    size_t start_port;
    size_t number_ports;
} port_data_t;

port_data_t* f() {
    port_data_t* ports = (port_data_t*)calloc(4, sizeof(port_data_t));
    return ports;
}
于 2009-03-09T05:55:37.657 に答える
0

Jeffamaphoneが指摘しているように、task_data_tはコンテキスト外です。また、Crashworksによって指摘されているように、port_dataに構造体の配列が必要な場合は、sizeof(port_data_t)を試してください。

sizeof(port_data *)を使用すると、sizeofポインターがport_data_tのポインターに割り当てられます。これは、ほとんどの場合、ほとんどの場合に非常に役立ちます。

于 2009-03-09T05:50:48.170 に答える