向数组添加元素时 C 中的分段错误

Segmentation Fault in C when adding an element to array

我正在尝试计算浮点数 <= 9999 的 floor 函数的结果。

#include <stdlib.h>
include <stdio.h>   
#include "string.h"
int main(int argc, char* argv[]) {
int i, j, k;
int x[1000];

for(i = 0; i < 10000; ++i){
    x[i] = i;
}

printf("Enter a float in 0..9999: ");
scanf("%d", k);

tester(x, k);
}

int tester(int* c, int k) {
printf("x[%d] = %d\n", k, c[k]);
}

当编译器出现时;

for(i = 0; i < 10000; ++i){
   x[i] = i;
}

它给出了分段错误;

x[i] = i;

这里。

我已经检查过关于分配分段错误的类似问题,但我找不到任何解决方法。有人可以帮忙吗?

数组 x 的长度为 1,000,但您在循环中将其视为长度为 10,000。对于大于或等于 1,000 的 i 访问 x[i] 是未定义的行为,因为索引超出了数组的范围。

因此,发生了分段错误,因为您的程序正在访问不允许访问的内存。

变量 k 已初始化,当获取输入时,scanf 语句中缺少“&”。这可能会出现分段错误,因为值“k”在函数 tester() 中传递。一般在 C 语言中,我们用“&”输入,除非它是一个字符串,你不一定在 scanf 语句中提到它!!.