好的,我很困惑,迫切需要幫助。我正在處理一個動態分配字串陣列的任務,并且我一直在使用 realloc 時遇到問題。我終于讓它看起來可以作業了,我只需要撰寫 for 回圈來正確顯示結果。
除此之外,代碼將停止作業。它會讓我輸入字串,與我之前用來測驗它的字串完全相同,程式會崩潰,說 realloc 遇到了無效指標的問題。每當我再次評論 for 回圈時,一切似乎都運行良好。
這可能是愚蠢的事情,或者是我對 realloc 不了解的事情的結果,但是我的時間不多了,各種搜索都沒有回傳任何我認為適用的答案,所以我想我會在這里問。
我用來測驗它的輸入是“你好,我的一個真正的朋友”。
這是我的代碼(是的,我知道,這是一團糟,抱歉。通常我對這些事情要好一些,但我一直很著急):
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int MAXSTRING = 255;
int makearg(char s[], char **args[]);
int main()
{
char **tokenArray;
char strInput[MAXSTRING];
int tokenResult;
int i = 0;
printf("Input String to be Parsed: ");
scanf("%[^\n]%*c", strInput);
tokenResult = makearg(strInput, &tokenArray);
printf("argc: %d\n", tokenResult);
for (i < tokenResult; i ;)
{
printf("arg(%d): %s\n", i, tokenArray[i][1]);
}
}
int makearg(char s[], char **args[])
{
int numTokens = 0;
int lastSpace = 0;
int i = 0;
char token[MAXSTRING];
int subFromPos = 0;
while ((s[i] != '\n') && (s[i] != '\0'))
{
token[i - lastSpace - subFromPos] = s[i];
if (s[i] == ' ')
{
token[i - lastSpace] = '\0';
*args = realloc(*args, (numTokens 1));
//printf("the seg fault hasnt happened yet 1\n");
args[numTokens] = NULL;
args[numTokens] = realloc(args[numTokens], (i - lastSpace 1));
//printf("the seg fault hasnt happened yet 2\n");
*args[numTokens] = token;
printf("Saved Token: %s\n", *args[numTokens]); //test to see if the token got written properly
numTokens ;
lastSpace = i;
subFromPos = 1;
}
//printf("%c\n", s[i]);
//printf("Token: %s\n", token);
//printf("the seg fault hasnt happened yet\n");
i ;
}
numTokens ;
return numTokens;
}
uj5u.com熱心網友回復:
你還沒有初始化 tokenarray
char **tokenArray;
因此,當您對其呼叫 realloc 時,您正在呼叫 UB。realloc 的引數必須是 NULL 或有效的堆指標。做這個
char **tokenArray = NULL;
并修復那個for回圈
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/431181.html
上一篇:計算Linux中的最大打開檔案數
