C++ c++;程序出现分段错误

C++ c++;程序出现分段错误,c++,C++,我一直在做一些编码,但我遇到了一个分段错误。我已经尽了最大的努力,但一直失败。现在我请求帮助。这是我的代码: #include <iostream> #include <string> using namespace std; int main() { string symbols = "ABCDEFGHIJKLMNOPRSTUVYZ_"; int sim, a = 0; sim = symbols.size(); string

我一直在做一些编码,但我遇到了一个分段错误。我已经尽了最大的努力,但一直失败。现在我请求帮助。这是我的代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{

    string symbols = "ABCDEFGHIJKLMNOPRSTUVYZ_";

    int sim, a = 0;

    sim = symbols.size();

    string temp[sim];

    while(sim > 0)
    {
    sim--;

    temp[sim] = symbols.substr(sim, 1);

    cout << temp[sim] << endl;
    }

}
#包括
#包括
使用名称空间std;
int main()
{
字符串符号=“ABCDEFGHIJKLMNOPRSTUVYZ”;
int-sim,a=0;
sim=symbols.size();
字符串温度[sim];
而(sim>0)
{
模拟--;
温度[sim]=符号子符号(sim,1);

想一想当
a==sim-1
时会发生什么-你立即增加它,使它变成
sim
,然后访问
temp[a]
,尽管
temp
sim-1
有有效的索引
0


我建议您放弃语言扩展,即VLA,改用
std::vector

临时[a]中的a将作为从1到sim(包括sim)的索引。临时数组具有sim元素,这意味着每个数组的有效索引都是从0到sim-1(包括sim-1)


将a++;移动到while循环中的最后一条语句,这将起作用。

a==sim-1
时,它将重新进入
while
循环,在
a++
处增加
a
以使
a==sim
然后在尝试访问
temp[a]
时崩溃


您可以通过在while循环的末尾而不是开始处增加
a来解决这个问题。

好的,temp[a]很清楚,一个更微妙的问题是,如果a==sym,substr(a,1)将返回分配给temp[a]的空字符串。这可能不会导致崩溃,但仍然是一个错误。

您知道程序在什么时候崩溃吗?(第一次尝试运行时,最后等)为了正确起见,拼写为“segfault”。是“segmentation fault”的缩写.SIGwhatever有一个特殊的含义——即它往往是一个常数,其值表示信号。在本例中,它的拼写为“SIGSEGV”。一个或另一个是合适的,但您必须选择一个。cHao->好的,我下次就这么做……感谢您的解决方案,我将a++;移动到循环的末尾,效果很好,谢谢大家:)
    while(sim > 0)
    {
    sim--;

    temp[sim] = symbols.substr(sim, 1);

    cout << temp[sim] << endl;
    }
    while(a < sim)
    {
    a++;

    temp[a] = symbols.substr(a, 1);

    cout << temp[a] << endl;
    }