目录
1、Floating point exception: 8(浮点异常:8)
2、报错:segmentation fault:11 (内存越界)
3、报错:error: use of undeclared identifier 'y'(引用错误)
4、excess elements in scalar initializer [-Wexcess-initializers]
5、没有正确使用i++和++i
程序运行到某处,出现:Floating point exception: 8(浮点异常:8);程序不再继续执行。
搜索发现:是while()里的条件:n >= 0不对,把条件改成 n > 0即可。
在网上搜索发现,大家出现这个错误的时候,都和0有关,如:m%n时未及时令n不等于0,等等。
此错误为非法除以0出现的错误。
这个报错的原因就是访问范围超出了内存分配的范围,在存储方面找找原因。本次出错是因为在递归时最低时定义到了n= 1时的情况,但是却使用到了 n = 0时,于是报错。
在写的过程中,用到了引用(&),错误原因:对引用的错误使用。
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。
涉及的代码:
void turn(int x, int y)//无引用
{
int t;
t = x;
x = y;
y = t;
}
void turn(int &x, int &y)//添加"&"引用
{
int t;
t = x;
x = y;
y = t;
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
turn(a, b);
printf("%d %d\n",a,b);
return 0;
}
结果:不添加引用时,最后输出的值没有被交换,添加引用后,如果是C++,则会交换值,但是如果是纯C语言,则会报错,认为你的x,y没有被定义过。
我一直以为在纯C语言环境里,不可以使用引用,但是后面我又使用了引用,结果正常运行了,看来是我没有用对。
我又使用了一次,报错了,看了纯c的环境下的确无法使用&,建议在自定义函数里使用指针,然后在main函数里调用时,使用&:
例如:
#include
#include
#define InitSize 10 //定义最大长度
typedef struct
{
int *data;
int MaxSize;
int length;
}SeqList;
//每个数据元素分配空间大小 MaxSize* sizeof(ElemType);
//顺序表的实现——动态分配
void InitList(SeqList *L)
{
L->data = (int *)malloc(InitSize * sizeof(int));
L->length = 0;
L-> MaxSize = InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList *L,int len)
{
int *p = L->data;
L->data = (int *) malloc((L->MaxSize+len)*sizeof(int));
for (int i = 0; i < L->length; i++)
{
L->data[i] = p[i];//将数据复制到新区域
}
L->MaxSize = L->MaxSize+len;//顺序表最大长度增加 len
free(p); //释放原来的内存空间
}
int main()
{
SeqList L; //声明一个顺序表
InitList(&L);//初始化顺序表
IncreaseSize(&L,5);
return 0;
}
int arr ={1,2,3};
报错:标量初始化器中的多余元素
原因:没有定义而直接初始化。
改正:int arr[10] = {1,2,3};
i++:
#include
int main()
{
int i = 0;
while (i++)
{
printf("while里的i = %d\n",i);
if (i == 3)
{
break;
}
}
printf("while循环外的i = %d\n",i);
}
输出结果:while循环外的i = 1
++i:
#include
int main()
{
int i = 0;
while (++i)
{
printf("while里的i = %d\n",i);
if (i == 3)
{
break;
}
}
printf("while循环外的i = %d\n",i);
}
输出结果:
while里的i = 1
while里的i = 2
while里的i = 3
while循环外的i = 3
总结一下:如果使用i++的话,执行过程:while(i)//这里i=0。{…},执行完{}里的内容后再i=i+1.
在上面的例子里,i=0则while(0),只有while(1)时才执行,所以不会执行while里面的东西。
如果使用++i的话,执行过程:
i=i+1,i=1,
while(i){输出while里的i = 1,且判断出i<3},
继续循环,i=i+1=2,
while(2){输出:while里的i = 2,且判断出i<3}
继续循环,i=i+1=3,
while(3){输出:while里的i = 3,且判断出i=3,break;}
那么此时输出:while循环外的i = 3
当然,并不是所有情况下,都会结果不同,有些情况下,结果一致。