简单地将指针传递给另一个函数FAILED

时间:2015-07-17 23:14:10

标签: c

在尝试将输入[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 */
}

1 个答案:

答案 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);