[英]C/unix Sockets: Segmentation fault (core dumbed) due to char pointer(?)
[英]Segmentation Fault in C due to pointer
我最近开始用C语言进行编码,并且正在Euler项目中做一些工作。 到目前为止,这是我用于挑战三的代码。 唯一的问题是,当我运行编译后的代码时,它将引发分段错误。 我认为这可能是由于我调用了一个指针造成的,可疑指针位于我的注释下方。 我对该主题进行了一些研究,但似乎无法修复该错误。 有什么建议吗?
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool is_prime(int k);
int * factors(int num);
int main(){
int input;
while (true){
printf("Enter a number to get the prime factorization of: ");
scanf("%d", &input);
if (is_prime(input) == true){
printf("That number is already prime!");
}else{
break;
}
}
//This is the pointer I think is causing the problem
int * var = factors(input);
int k;
for (k = 0; k < 12; k++){
printf("%d", var[k]);
}
}
bool is_prime(int k){
int i;
double half = ceil(k / 2);
for (i = 2; i <= half; i++){
if (((int)(k) % i) == 0){
return false;
break;
}
}
return true;
}
int * factors(int num){
int xi;
static int array[1000];
int increment = 0;
for (xi = 1;xi < ceil(num / 2); xi++){
if (num % xi == 0){
array[increment] = xi;
increment++;
}
}
}
factors
函数没有return语句。 它应该返回一个指针,但不返回任何东西。
旁注:启用编译器的警告(例如,使用gcc -Wall -Wextra
)。 如果已启用它们,请不要忽略它们!
您的函数声明为
int * factors(int num);
但它的定义不返回任何内容,但您正在赋值中使用它的返回值。 这将触发未定义的行为 。 如果在没有严格警告的情况下进行编译,它将进行编译,并且返回值很可能是返回寄存器中保留的任意随机值(例如x86上的EAX)。
C-99标准§6.9.1 / 12 功能定义
如果到达终止函数的},并且调用者使用了函数调用的值,则该行为未定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.