当我尝试编译它时,没有错误。然后,我运行编译的文件,它崩溃了,没有错误。
程序已停止工作:关闭或调试
我的程序的目标是先加密然后解密消息。
这是一个代码:
#include <iostream>
#include <string>
using namespace std;
char Encrypt(char Char) { return Char * Char / 2; }
char Decrypt(char Char) { return Char * 2 / Char; }
int main(int argc, char **argv) {
string text = "Hello World, guys!";
string encryptedtext;
string decryptedtext;
for (int i = 0; i <= text.size(); i++) {
encryptedtext += Encrypt(text[i]);
}
cout << encryptedtext;
for (int i = 0; i <= encryptedtext.size(); i++) {
decryptedtext += Decrypt(encryptedtext[i]);
}
cout << decryptedtext;
}
我看到“进程在0.6444秒后退出,返回值3221225620” 伙计们,我是怎么说的,但错误是一样的。这是代码:
#include <iostream>
#include <string>
using namespace std;
char Encrypt(char Char) {
return Char * Char / 2;
}
char Decrypt(char Char) {
return Char * 2 / Char;
}
int main(int argc, char** argv) {
string text = "Hello World, guys!";
string encryptedtext;
string decryptedtext;
for (char ch : text) {
encryptedtext += Encrypt(ch);
}
cout << encryptedtext;
for (char ch : encryptedtext) {
decryptedtext += Decrypt(ch);
}
cout << decryptedtext;
}
答案 0 :(得分:2)
您的for循环错误
val env = StreamExecutionEnvironment.getExecutionEnvironment
val s = env.fromCollection(List("a", "b", "c", "d", "e"))
val t = env.addSource((context: SourceContext[String]) => {
while(true) {
Thread.sleep(100)
context.collect("dummy")
}
})
s.union(t)
.filter(_ != "dummy")
.windowAll(TumblingProcessingTimeWindows.of(Time.seconds(1)))
.process(new ProcessAllWindowFunction[String, String, TimeWindow] {
override def process(context: Context, elements: Iterable[String], out: Collector[String]): Unit = {
out.collect(elements.toList.sorted.toString())
}
})
.print()
env.execute()
应该是
for (int i = 0; i <= text.size(); i++) {
encryptedtext += Encrypt(text[i]);
}
,第二个循环出现相同的错误。
但是更好的是基于范围的循环
for (int i = 0; i < text.size(); i++) { // use < not <=
encryptedtext += Encrypt(text[i]);
}
更容易理解,并且避免了此类错误。
答案 1 :(得分:0)
如果将3221225620
转换为十六进制,则会得到0xC0000094
,这是Windows错误代码“被零除”。
这是由for循环引起的:
for (int i = 0; i <= text.size(); i++)
您传递给i
的{{1}}的最后一个值为text[i]
,但是text.size()
中的最后一个元素为text
。这是未定义的行为,但是text[text.size()-1]
的实现大概为null会终止字符串缓冲区,因此std::string
返回text[text.size()]
。这导致\0
被传递到\0
,从而产生Decrypt
错误。正确的for循环是:
divide by zero
请注意,您的算法无法正常运行,因为for (int i = 0; i < text.size(); i++)
并非Decrypt
的反向,并且从Encrypt
返回的值溢出了Encrypt
中可存储的范围。这还会产生附加的零除错误,例如空格字符的值为char
。 32
是32 * 32 / 2
,当被截断为512
时会得到char
。