繁体   English   中英

C确定堆栈溢出

[英]C identified STACK OVERFLOW

我已经完成了上面的代码,并使用了2种不同的编译器,其中一个说“ 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变量。 有人可以帮我吗?

如果您定义这样的数组:

int w[k];

它将存储在大小有限的堆栈中。

如果使用malloc初始化,则数据将存储在堆中(堆的大小也有限,但是可以存储更多数据)

int *w = malloc(sizeof(int) * k);

你有尝试过吗?

检查此内容以了解堆栈与堆之间的差异。

始终检查malloc()的返回值,这只是一个示例,但是不使用malloc()返回值是一种不好的做法。

除非使用动态内存分配,否则无法在运行时定义变量大小。

如我所见,您正在尝试根据用户输入来设置变量大小。

为此,您必须使用动态内存分配。

scanf("%d %d", &k, &x);
if(k > MAX_SIZE) {
    return -1;
}
int *w = malloc(sizeof(int) * k);

现在,您已经根据用户输入的大小分配了内存。 但是请确保施加一些限制,因为堆内存是有限的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM