[英]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.