[英]Segmentation fault on malloc for double pointer
我正在編寫一個程序,該程序從文件中讀取文本,將其分隔為字母數字單詞,依此類推。 我遇到了一個問題,在該問題中,我已經從文件中讀取了一個字符串,然后嘗試將該字符串定界為一個二維數組,其中每個單詞都存儲在一個數組中。 從那里,我將繼續訂購它們。
但是,當我為單詞[n]分配內存時,出現了段錯誤。 對於我正在使用的測試文件,它具有約400個字符。 沒有一個單詞的長度超過10個字符,因此(j-i + 1)不會是一個很大的分配,它可能導致堆棧溢出(除非我誤解了我的分配)。
我可以根據需要解釋該函數的代碼,它是對我編寫的strsplit()函數的操縱。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
if (argc != 2) {
printf("Please provide 1 argument.\n");
return 0;
}
FILE *file = fopen(argv[1], "r");
fseek(file, 0, SEEK_END);
size_t length = ftell(file); // Getting file size
char buff, **words, buffer[length + 1];
int i = 0, j = 0, n = 0, h = 0;
buffer[length] = '\0';
rewind(file);
fread(buffer, 1, length, file); // Read file into buffer, close file
fclose(file);
// Deliminate to 2-D array of words
while (buffer[i] != '\0') {
while (isalnum(buffer[j]))
j++;
i = j;
while (isalnum(buffer[j]))
j++;
words[n] = (char *)malloc(sizeof(char) * (j - i + 1));
while (i < j)
words[n][h++] = buffer[i++];
n += 1, h = 0;
}
}
值得注意的是,文件輸入有效,並且定界算法有效(它正確地捕獲了文件中從i到j的第一個單詞)。 我需要為** word分配malloc嗎? 我不認為這是問題所在,但是我不知道示例文件中有多少個單詞,因此我將不得不分配大量的單詞。
您從未真正將words
的值設置為任何值。 words
需要一些記憶才能填充words[n]
。
您可以執行char** words = malloc(MAX_NUM_OF_WORDS * sizeof(char*))
或具有基於堆棧的集合: char* words[MAX_NUM_OF_WORDS]
今天的免費提示:使用沒有NULL檢查的file
不是一個好習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.