簡體   English   中英

fprintf 導致 C 中的分段錯誤

[英]fprintf causing Segmentation Fault in C

錯誤行在底部function的最后幾行找到。 我已將錯誤范圍縮小到 fprintf 行,我知道 SEG FAULT 並非巧合地與這些代碼行對齊,並且實際上是另一個線程導致了問題,因為我通過使用 sleep function 在不同的時間間隔,以便通過在考慮手動設置的時間間隔的情況下估計何時發生 SEG FAULT 來驗證錯誤來源。 瞧,如果我使用 sleep(3) 而不是 Caps 中的注釋,則 SEG FAULT 會在 3 秒后出現。

測試輸入和緩沖區,即“buffer”,因此包含“:create rosemary 10 password”

結構定義:

typedef struct {
        struct sockaddr_in addr;
        int sock_fd;
        char name[16];
        time_t time_since_last_msg;
        room *current_room;
} client;

Function:

void create_new_room(client* cli, char buffer[]) {

        pthread_mutex_lock(&mutex);

        printf("START create_new_room()\n");

        char room_name[16], password[16], *token;
        int capacity;

        room *new_room = malloc(sizeof(new_room));

        pthread_t tid;

        FILE *rooms = NULL;

        if((rooms = fopen("room-info.txt", "a")) == NULL) {
                perror("Failed to open file.");
                exit(-1);
        }

        token = strtok(buffer, " ");
        token = strtok(NULL, " ");
        strcpy(room_name, token);
        token = strtok(NULL, " ");
        capacity = atoi(token);
        token = strtok(NULL, " ");
        strcpy(password, token);

        FD_ZERO(&(new_room->write_set));
        strcpy(new_room->room_name, room_name);
        new_room->room_id = ++natural_id;
        add_room(new_room);
        sleep(3);

        // WTF IS GOING ON HERE?!?!?! 
        fprintf(rooms, "%s\n", room_name);
        fprintf(rooms, "id=%u\n", natural_id);
        fprintf(rooms, "owner=%s\n", cli->name);
        fprintf(rooms, "capacity=%d\n", capacity);
        fprintf(rooms, "pass=%s\n\n", password);

        room *new_room = malloc(sizeof(new_room));

是錯的。 您只為指針分配空間,而結構則需要空間。

它應該是

        room *new_room = malloc(sizeof(*new_room));

或者

        room *new_room = malloc(sizeof(room));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM