gpt4 book ai didi

c - 语句在 main 中运行,但在从函数调用时不运行

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:00 25 4
gpt4 key购买 nike

对不起。我真的试图自己解决这个问题。但我不明白。当我将它们放在 main 中时,这些语句运行正常。但是当我在 main 的函数中调用它们时,会发生段错误。是内存溢出了吗?

void displayTime(char state[]) {
time_t totalSec = time(NULL);//total no of secs since EPOCH
struct tm *currTime = localtime(&totalSec); //store local time in struct declared in time.h
char *result;
strftime(result, 20, "%Y:%m:%d %H:%M:%S", currTime); //E.g. 2017:11:12 12:30:48 Max is 20 characters including \0
printf("Program at %s\n", result );
}

int main() {
displayTime("started");
return 0;
}

最佳答案

在导致问题的 result 中分配内存。

在你的情况下会是

result = malloc(sizeof(char)*BUFFSIZE);
if( result == NULL ){
fprintf(stderr,"Error");
exit(1);
}

必须有一个相应的free调用分配的内存,这里就是

免费(结果);

访问未初始化的变量也是未定义的行为。


同样,如果没有 malloc,您也可以简单地执行此操作

char result[20];

strftime(result,20, "%Y:%m:%d %H:%M:%S", currTime);

我之前使用 state 进行的编辑也是不可能的。 (没有注意到它是文字字符串)因为字符串文字属于内存的只读部分。现在我们试图编辑或修改它。这是错误的。

其次,即使它不是只读的,它仍然没有内存来保存您要写入的字符。因为尺寸不够大。


进一步说明

要弄清楚问题,请查看 result 变量。它是 char* 类型。它应该包含 char 变量的地址。现在,当您声明它时。然后它包含一个不确定的值。

它是否指向任何有意义的东西?没有。

现在,当您将变量传递给函数时,它会尝试将某些内容写入地址包含在 result 变量中的位置。但这不是什么有用的东西,你会尝试访问一些甚至不适合你的内存。(不允许)。

段错误是由试图读取或写入非法内存位置的程序引起的。

这就是你的情况。

是不是内存溢出了?

没有。它与溢出无关。


此外,代码中 state 的用途是什么?您没有在代码的任何地方使用它。你可以避免它。

关于c - 语句在 main 中运行,但在从函数调用时不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320724/

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