gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:18:27 25 4
gpt4 key购买 nike

当我尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com