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

Why does this code return segmentation fault error?

本文关键字:错误 分段 返回 代码 为什么      更新时间:2023-10-16

我正在编写此代码以优化问题的时间,这是一个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);

相反。