c - 简单地将指针传递给另一个函数失败

标签 c

当我尝试将 input[i] 传递给另一个函数时,我不断收到运行时错误...我不知道为什么。它应该将 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 */
}

最佳答案

看起来 convertIntoPost 预计会通过它接收到的 out 参数间接分配给 output[i]。如果您还没有抽出时间来添加这一部分,您仍然需要初始化指针,以便调用者中的 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);

关于c - 简单地将指针传递给另一个函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486036/

相关文章:

c++ - 货叉工作

c - 通知丢失的事件

c - 为什么这个程序总是给出相同的输出 : 0x63

c - 读入 char 并判断是否有空格或换行符 C

c - 为什么速度返回零?在C中

c - for(++i;++i;++i) 第二个参数是 < 或 <=?

c - 如何在 C 中有效地拆分字符串和复制子字符串?

python - 在控制台上显示有向图

c++ - 为什么我在 MinGW 中不需要标志 -lm 但在 Linux 中我明确需要它?

c - 将数据存储到多维数组中