在尝试将输入[i]传递给另一个函数时,我一直收到RUNTIME ERROR ...我不知道为什么。它应该将input [i]的地址传递给另一个函数中的另一个指针,所以我不知道它出错的地方。它必须是非常简单的东西,我没能抓住......
编辑:实际上我的程序在传递数组之前就停止了并退出。
void processInfixExp(const char * fileName)
{
char ** input = NULL, ** output = NULL;
int i = 0, numInput = 0;
char len;
char tempInput[100] = {0};
FILE * pFile = NULL;
if((pFile = fopen(fileName, "r")) == NULL)
{
printf("Cannot read file %s\n", fileName);
system("PAUSE");
exit(1);
}
while(fgetc(pFile) == '\n')
++numInput;
/* printf("%d\n", numInput); */
input = (char**)malloc(numInput * sizeof(char*));
output = (char**)malloc(numInput * sizeof(char*));
if(!input || !output)
{
printf("Memory allocation failed.\n");
system("PAUSE");
exit(1);
}
rewind(pFile);
for(i = 0; fgets(tempInput, MAXL, pFile) != NULL; ++i)
{
/* printf("%s\n", tempInput); */
len = strlen(tempInput);
while(len && tempInput[len-1])
tempInput[len-1] = '\0';
input[i] = strdup(tempInput);
printf("%s\n", input[i]); /* PRINTF SUCCESS */
}
fclose(pFile);
for (i = 0; i < numInput; ++i)
{
convertIntoPost (input[i], &output[i]);
printf (" input[%2zu]: %-25s output[%2zu]: %s\n", i, input[i], i, output[i]);
}
free(input), free(output);
}
void convertIntoPost(char * in, char ** out) /* TEST PASSING input[] */
{
printf("%s", in); /* NO SUCCESS */
}
答案 0 :(得分:1)
通过查看收到的convertIntoPost
参数,看起来期望output[i]
分配给out
。如果你还没有添加它的那部分,你仍然需要初始化指针,以便调用者中的printf
成功。
void convertIntoPost(char * in, char ** out) /* TEST PASSING input[] */
{
printf("%s", in); /* NO SUCCESS */
*out = strdup("");
}
此外,在您free(input)
和free(output)
之前,您需要释放他们指向的所有字符串,否则他们将成为孤儿。
for (i = 0; i < numInputs; i++) {
free(input[i]);
free(output[i]);
}
free(input);
free(output);