【发布时间】:2020-11-02 20:36:12
【问题描述】:
我有问题。我已经做了好几个小时了,我终于想到我有一个草稿,我解决了我犯的一些错误,但现在当我运行它时它正在输入“浮点异常(核心转储)”。我能够解决其他一些问题,但我认为如果不从头开始,我就无法克服这个问题,我不知道是什么原因造成的,我想知道这里是否有更多知识渊博的人可以看看并尝试找出可能的错误。我的程序应该找到非平方数 - 不能被整数的平方整除的数字。它首先找到要除以的平方,然后将非平方数候选除以指定整数。然后它会输入它找到的所有数字。我认为很有可能我在指针使用方面犯了一个错误,我还没有完全掌握这些,而且很可能无论如何也无法解决相关问题。
#include <stdio.h>
#include <limits.h>
#include <math.h>
#include <stdlib.h>
int isNonSq (int a,int sqr) {
int b=0.75*a;
for (int i=2;i<b;i++) {
if (a%sqr[i]==0) return 0;
}
return 1;
}
int main ( void ) {
int a;
int * resNum;
int * sqr;
while (!feof(stdin)) {
if (scanf(" %d",&a)!=1||a<=0) {
printf("Nespravny vstup.\n");
return 0;
} else {
int b, c=1;
b=0.75*a;
resNum=(int)malloc(a*sizeof(resNum));
sqr=(int)malloc(a*sizeof(*sqr));
for (int i=2;i<sqrt(a);i++)
sqr[i]=pow(i,2);
for (int i=1;i<b;i++) {
if (isNonSq(i,sqr)) {
resNum[c]=i;
c++;
}
}
}
}
for (int i=1;i<a;i++) {
printf(" %d",resNum[i]);
}
printf("\n");
free(resNum);
free(sqr);
return 0;
}
【问题讨论】:
-
“我不知道是什么原因造成的”。这就是调试器的用途。在调试器中运行您的程序,它至少会告诉您触发异常的确切代码行。您还可以使用调试器单步调试代码并在运行时检查变量。
-
resNum=(int)malloc(asizeof(resNum));asizeof是什么?我怀疑这没有分配正确的大小。而且演员阵容是错误的,因为resNum是int *而不是int。只需将其删除,因为不需要强制转换malloc的返回值。 -
int b=0.75a;上的a后缀是什么?是否缺少*或其他什么? -
从 kaylum 如果指针是 8 字节,
int是 4 字节,那么强制转换会破坏指针。所以演员阵容将是破坏性而不是不必要的。
标签: c exception point floating