C 程序获取细分故障
c++ program gets segmentation fault
我一直在做一些编码,并且遇到了分段故障。我尽了最大的努力使其正常工作,但我一直失败。现在我要寻求帮助。这是我的代码:
#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;
}
}
好吧,这有点有效,但是如果我进行一些更改,它会崩溃。
我更改:
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;
}
我得到了sigfault,我真的不明白这是错误的。我使用了调试器,它并没有真正显示出崩溃的线路,它只是显示了:
程序接收到信号sigsegv,分段故障。
在__gnu_cxx::__exchange_and_add(int volatile *, int) () ()
想想a == sim-1
-您立即将其递增时会发生什么,因此它变为sim
,然后访问temp[a]
,尽管temp
具有有效的索引0
对sim-1
。
我建议您放弃语言扩展-VLA的 - 并改用std::vector
。
当a == sim-1
时,它将重新输入while
循环,在a++
处递增a
,以便a == sim
,然后在尝试访问temp[a]
时会崩溃。
您可以通过在while循环而不是开始时通过增加a
来解决此问题。
您的temp [a]将以1到SIM的索引(包含)。温度阵列具有模拟元素,这意味着Thay数组的有效索引从0到SIM-1(包括Sim-1)。
移动a ;成为循环时的最后一个语句,这将起作用。
好吧,temp [a]很明显,一个更微妙的问题是substr(a,1)如果a == sym将返回您分配给temp的空字符串]。这可能不会导致崩溃,但仍然是一个错误。
相关文章:
- 程序接收了信号sigsegv,在代码块中调试时的细分故障
- 双链接列表.细分故障
- 使用std ::复制复制阵列时获取细分故障
- 为什么此代码会产生细分故障
- strcat 3 char从char []到char *在Windows上工作,但在Cygwin中给出了细分故障
- 细分故障 - 将对象通过服务器发送到客户端
- 为什么在C 中调用模板超载运算符时,我会遇到细分故障
- 试图销毁SF ::字体时的细分故障
- 跳过列表中的细分故障
- 从新位置调用函数时C 细分故障
- 程序执行因细分故障而停止:11
- GDB执行时,Apache IGNITE C 客户端应用程序具有许多细分故障
- C 细分故障访问类数据成员,而无需明确使用指针
- 写入文件时的细分故障
- 获得细分故障
- 方法调用上的C 细分故障
- boost :: asio io_service :: run_one导致细分故障
- 在循环的末尾获取细分故障
- C 程序获取细分故障
- C 细分故障由全局变量在单独的源文件中引起