繁体   English   中英

为什么这段代码会返回分段错误错误?

[英]Why does this code return segmentation fault error?

我写这段代码是为了优化问题的时间,这是一个dp问题

给定字符串 S 是: 574674546476

对于索引 1:从 5 到字符串末尾的偶数个数为 7,因此索引 1 的结果为 7。

对于索引 2:从 7 到字符串末尾的偶数个数为 7,因此索引 2 的结果为 7。

对于索引 3:从 4 到字符串末尾的偶数个数为 7,因此索引 3 的结果为 7。

对于索引 3:从 6 到字符串末尾的偶数个数为 6,因此索引 4 的结果为 6。

...

这是我尝试过的代码,但它在这段代码中显示了分段错误

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char str[10005];
    int i;
    cin >> str;
    int n = strlen(str);
    int arr[10005];
    for (i = 0; i < n; i++) {
        arr[i + 1] = str[i] - 48;
    }

    int tab[n + 1];

    if (arr[n] % 2 == 0) {
        tab[n] = 1;
    }
    else {
        tab[n] = 0;
    }

    for (i = n - 1; i >= 1; i++) {
        if (arr[i] % 2 == 0) {
            tab[i] = tab[i + 1] + 1;
        }
        else {
            tab[i] = tab[i + 1];
        }
    }
    for (i = 1; i <= n; i++) {
        cout << tab[i] << " ";
    }
}

我希望输出应该是

7 7 7 6 5 5 4 4 3 2 1 1

但是当我提供输入574674546476并且我想使用 dp 解决我编写代码时,它显示分段错误。

      for(i=n-1;i>=1;i++){

应该

      for(i=n-1;i>=1;i--){

这解释了崩溃,但是当人们提交有竞争力的代码时,我们也会看到两个常见错误

这不是标准的 C++ 头文件

#include<bits/stdc++.h>

在此代码中,您应该使用

#include <iostream>

这不是合法的 C++

int tab[n+1];

因为在 C++ 中数组大小必须是编译时常量,但这里n是一个变量。 你应该使用

#include <vector>

vector<int> tab(n+1);

反而。

暂无
暂无

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

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