簡體   English   中英

在 null 指針上使用 malloc 時出現分段錯誤 (SIGSEGV)

[英]Segmentation Fault (SIGSEGV) when using malloc on null pointer

這就是我的主要功能的樣子。 這無法更改,因為它正在我的教授用來為作業評分的文件中使用。

char** lines = NULL;
int line_count = 5;
add_lines(&lines, line_count);

在這個function中,我需要動態分配lines數組並在里面存儲多個字符串。 memory 然后在 main 中被釋放。 這就是我目前的做法,但我不斷收到段錯誤。 (這個 function 也必須帶一個char*** )。

void add_lines(char*** lines, int line_count) {
    *lines = (char**)malloc(line_count*sizeof(char*));
    for (int i = 0; i < line_count; i++)
        *lines[i] = (char*)malloc(64*sizeof(char));
}

我假設此錯誤與取消引用和嘗試動態分配 NULL 指針有關,但我不確定 go 如何修復它。

這條線沒有按照你的想法做:

 *lines[i] = (char*)malloc(64*sizeof(char));

數組索引運算符[]的優先級高於一元解引用運算符* 因此它嘗試將lines作為數組訪問(它不是),然后取消引用數組成員。 這最終在i為 0 時起作用,因為它將指向第一個分配的數組元素,但是當i較大時,您可以通過調用 function 中的lines訪問 memory。

您需要使用括號確保首先取消引用lines ,然后索引數組元素。

 (*lines)[i] = malloc(64*sizeof(char));

另外,不要malloc的返回值。 這是不必要的,並且可以掩蓋細微的錯誤。

暫無
暫無

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

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