#include <stdio.h>
#define N 100
int main()
{
int n,c,d,a[N],b[N];
printf("Insert elements numbers in the array\n");
scanf("%d ", n);
printf("Insert the elements in the array\n");
for (c = 0; c < n ; c++)
scanf("%d", a[c]);
for (c=n-1,d = 0;d < n; c--,d++)
b[d]= a[c];
for(c = 0; c <n; c++)
a[c] = b[n];
printf("The array inverted is\n");
for(c=0; c<n;c++)
printf("%d\n",a[c]);
return 0;
}
为什么会崩溃?即使有价值(N <100)我仍然尝试但仍然崩溃,我不知道如何解决它?有谁可以帮助我吗 ?谢谢!
答案 0 :(得分:6)
此:
scanf("%d ", n);
调用未定义的行为。 scanf()
需要一个指向数字存储位置的指针,它应该是:
scanf("%d ", &n);
其他scanf()
来电也是如此。此外,在依赖包含有效值的变量之前,应检查返回值以了解它是否成功读取了数据。
答案 1 :(得分:3)
scanf
需要写入地址,而不是实际值。
请改为:
scanf("%d", &a[c]);
答案 2 :(得分:0)
他们对scanf
需要地址的说法。但是,这是做什么的?
for(c = 0; c <n; c++)
a[c] = b[n];
n
是每个数组中元素的数量,因此调用b[n]
会给您一个(可能是未宣布的)问题。编译器倾向于不警告那种超出范围的访问(参见this post)。
我怀疑你打算将b
复制到a
,而不是将一个值复制到a
的每个元素,但这纯粹是猜测,因为你没有宣布预期的内容输入或输出是。
答案 3 :(得分:0)
为什么会崩溃?
Wiki说:
计算中的崩溃(或系统崩溃)是指计算机或程序(例如软件应用程序或操作系统)无法正常运行。通常情况下,它会在遇到这些错误后退出。负责的程序可能会冻结,直到崩溃报告服务记录崩溃的详细信息。如果程序是操作系统内核的关键部分,整个计算机可能会崩溃,通常会导致致命的系统错误。此行为称为“崩溃”。
导致应用程序崩溃的典型错误包括:
- 尝试读取或写入未分配给该应用程序读取或写入的内存(分段错误)或x86特定(一般保护错误)
- 尝试执行特权或无效指令
- 尝试在无权访问的硬件设备上执行I / O操作
- 将无效参数传递给系统调用
- 尝试访问应用程序无权访问的其他系统资源(总线错误)
- 尝试使用错误的参数执行机器指令(取决于CPU架构):除以零,对denorms或NaN值的操作,对未对齐地址的内存访问等。
在你的程序中,语句
scanf("%d ", n);
和
scanf("%d", a[c]);
导致程序崩溃。
正如其他人建议在&
参数
scanf
运算符
scanf("%d ", &n);
scanf("%d", &a[c]);