我已经制作了上面的代码,我使用了两个不同的编译器,一个说“Segmentation Fault”,另一个说“handle_exceptions:Exception:STATUS_STACK_OVERFLOW”。 这是代码。
int main() {
int k, x, f, i, j, tmp, ct;
scanf("%d %d", &k, &x);
int w[k];
for( f = 0; f<k; f++){
scanf(" %d", &w[f]);
}
while(x--){
scanf("%d %d", &i, &j);
tmp = 3;
for(ct = j; i<=ct<=j; ct--){
if(tmp > w[ct]){
tmp = w[ct];
}
}
printf("%d\n", tmp);
}
return 0;
}
我已经对这段代码进行了逐行评论和测试,我在这里发现错误:
int w[k];
我不知道我能做什么,因为在发生此向量的声明时已经定义了 k 变量。有人可以帮帮我吗?
答案 0 :(得分:3)
如果您定义了这样的数组:
int w[k];
它将存储在堆栈中,该堆栈的大小有限。
如果使用malloc
初始化,数据将存储在堆中(其大小也有限,但它允许您存储更多数据)
int *w = malloc(sizeof(int) * k);
你试过这个吗?
检查this堆栈与堆之间的差异。
始终检查malloc()
的返回值,这只是一个示例,但不是returned value of malloc()是不好的做法。
答案 1 :(得分:-2)
除非使用动态内存分配,否则无法在运行时定义变量大小。
正如我所看到的,您正在尝试根据用户的输入设置变量大小。
为此,您必须使用动态内存分配。
scanf("%d %d", &k, &x);
if(k > MAX_SIZE) {
return -1;
}
int *w = malloc(sizeof(int) * k);
现在根据用户输入输入的大小分配内存。但请确保您施加了一些限制,因为堆内存有限。