[英]Why am I getting a segfault when assigning a malloc()'d pointer to a char*?
[英]Why am I getting a segfault when assign a char to a pointer to pointer char after realloc space for it?
所以我有一個雙字符點猜測,我已經為它分配了 malloc 空間,並且當我為獲得正確數量的 memory 分配時,我已經重新分配了額外的字符。 我遇到的問題是,每當它點擊*guess[i] = input
時它就會出現段錯誤,我無法弄清楚為什么如果我從 stdin 傳遞它 \n 它可以工作並通過 for 循環,但只要有多個字符來自標准輸入它的段錯誤
這是 for 循環和之前的 malloc
char input;
guess = (char**) malloc(1*sizeof(char));
for(int i = 0; input != '\n'; i++)
{
input = getc(stdin);
lengthG += 1;
*guess =(char *) realloc(*guess, lengthG * sizeof(char));
*guess[i] = input;
}
這是整個 function
int fund_check_input(char *val, char **guess)
{
size_t lengthV = 0;
size_t lengthG = 0;
for(int i = 0; val[i] != '\0'; i++)
{
if(lengthV < 4)
{
if(val[i] < 48 || val[i] > 57)
return -1;
else
lengthV += 1;
}
else
return -1;
}
char input;
guess = (char**) malloc(1*sizeof(char));
for(int i = 0; input != '\n'; i++)
{
input = getc(stdin);
lengthG += 1;
*guess =(char *) realloc(*guess, lengthG * sizeof(char));
*guess[i] = input;
}
printf("%s\n", "hey");
if(lengthG != lengthV)
return 0;
else
{
for(int i = 0; *guess[i] != '\0'; i++)
{
if(val[i] != *guess[i])
return 0;
}
}
return 1;
}
我認為我分配了足夠的 memory 因為當我增加重新分配的數量時它仍然會出現段錯誤,所以我不完全確定發生了什么。
這里
guess = (char**) malloc(1*sizeof(char));
^^^^^
您只為 1 個字符分配 memory。
但是,您似乎想要一個指向字符的空間。
您是否打算這樣做:
guess = (char**) malloc(1*sizeof(char*));
^
另請注意
C 中不需要類型轉換。
那個guess = malloc(1*sizeof *guess);
通常是一種更好的形式,因為您避免了上面所做的拼寫錯誤。 ( 1*
也可以刪除)
也就是說,在修復上述錯誤后,考慮*guess
的值是多少。 在調用realloc
之前,您需要確保它已正確初始化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.