簡體   English   中英

具有結構行為的段錯誤

[英]Seg fault with struct behavior

我目前有一個用於存儲端口和目標地址信息的結構,我想用一個簡單的文本文件讀取數據。

typedef struct {
    int listen_port;
    int forward_port;
    char *forward_addr;
} Route;

如果我只是分配30它工作正常。

例如

while((read = getline(&line, &length, f)) != -1) {
    Route *srv = (Route*) malloc(sizeof(Route));
    srv->listen_port = 30;  //works fine
    /* rest of code */
}

但是,如果我嘗試使用strtok來標記從文件80,127.0.0.1,8080讀取的行,然后將其分配給srv->listen_portsrv->listen_port出現seg錯誤。

例如

while((read = getline(&line, &length, f)) != -1) {
    int port = atoi(strtok(line, ","));
    Route *srv = (Route*) malloc(sizeof(Route));
    srv->listen_port = port;  //seg fault
    /* unreachable code */
}

有人可以解釋為什么會這樣嗎? 我很難過為什么它不起作用。

提前致謝。

看到

atoi - 如何識別零和錯誤之間的區別?

此外,如果line是一個零長度字符串,strtok只能返回NULL,因此可能有atoi(NULL)

這段代碼的行為可能是如此不明確......

1)將行初始化為NULL,getline將為您分配空間(如果它不是NULL,它將假定您已經分配了它)

2)使用后自由行

3)使用strtol或scanf來獲取整數,因為你和編譯器不能確定輸入行將包含ascii數字中的數字

4)檢查malloc的返回值,如果失敗則返回NULL

作為一般規則,處理每個可能的錯誤情況,這是C中必要的最佳實踐

暫無
暫無

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

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