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;
}