【发布时间】:2017-08-08 13:02:02
【问题描述】:
我有一个返回指针的函数,我正在让它计算给定数字的阶乘。
这是我无法更改的骨架代码
#include<stdio.h>
#include<string.h>
//Read only region start
char* factorial (int input1)
{
//Read only region end
//Write code here
}
我写的代码是:
我也试试这个代码
#include<stdio.h>
#include<string.h>
//Read only region start
char* factorial (int input1)
{
//Read only region end
//Write code here
char fact=1;
while(input1!=0)
{
fact = fact * input1;
input1--;
}
return fact;
}
左边是问题,右边是我正在写的代码。 它抛出的错误是“Segmentation fault”
该程序不需要main() 函数,因为mettl 在后端使用它来调用函数并评估结果。
【问题讨论】:
-
不要发布您的代码图片,而是直接复制粘贴到您的问题中
-
char *fact=1;声明了一个指针并将指针(地址)设置为 1。因此,对*fact+input的引用将是一个段错误,因为您试图访问内存中的地址1。您需要分配一个有效的地址放入fact,然后才能正确引用。 -
将您的代码作为文本发布会更好。屏幕截图很难阅读,也无法从中复制/粘贴代码。您没有函数指针,而且您似乎也不了解指针在取消引用时是如何工作的。你的指针指向一个无效的地址,然后你写在那里,所以这是未定义的行为,但这种情况通常会导致崩溃。
-
您的新代码正在生成一个整数,但随后将其作为
char *返回。如果该函数的调用者试图将其作为指针引用,那么您会得到一个段错误。您的函数没有返回某个地址。目前还不清楚它应该具体返回什么。顺便说一句,它不是函数指针。这是一个返回指向char的指针的函数。它返回的指针需要指向调用者可用的有效内存地址。你熟悉 C 的工作原理吗?char fact;将fact声明为单个字节,取值范围 -128 到 127。 -
这 (stackoverflow.com/a/44053522/920069) 回答了您的问题,但它是用 C++ 编写的。我在这里将其改编为 C:ideone.com/tER5R3 如果有帮助,请给他点赞。
标签: c