我只收到某些编译器的Segfault

 2674224139_8a6503 发布于 2023-02-07 17:51

我编写了以下代码来加密文本(它远未完成):

#include 
#include 

using namespace std;

class Device {
    string input;
    string encrypted;
    string decrypted;
    string key;
    int keysize;

public:
    Device(string inp) {
        input = inp;
        keysize = 0;
    }

    int give_key(string ikey) {
        key = ikey;
        keysize = key.size();
    }

    string encrypt() {
        if(key != "") {
            for(int enc = 0, keyiter = 0; enc < input.size(); ++enc, ++keyiter) {
                cout << "Starting loop #" << enc << endl;
                if(keyiter == keysize) keyiter = 0; //Reset key iter

                int coffset = key[keyiter] - 48;
                cout << "Setting offset to " << coffset << endl;

                int oldspot = input[enc];
                cout << "Setting oldspot to " << oldspot << endl;

                cout << "Char " << input[enc] << " changed to ";
                //Skip non-letters between upper and lowercase letters
                if((input[enc] + coffset) > 90 && (input[enc] + coffset) < 97) {
                    int holder = 90 - oldspot;
                    input[enc] = (coffset - holder) + 97;

                }
                else if((input[enc] + coffset) > 122) {
                    int holder = 122 - oldspot;
                    input[enc] = (coffset - holder) + 65;
                }
                else {
                    input[enc] += coffset;
                }
                cout << input[enc] << endl;
                cout << endl;
            }
        }
        else {
            cout << "Key not set!" << endl;
        }

        cout << "Setting Encrypted" << endl;
        encrypted = input;

        cout << "Finishing encryption function" << endl;
    }

    string get_encrypt() {
        return encrypted;
    }

};


int main()
{
    Device device("AbCdEfG");
    device.give_key("12345");
    device.encrypt();
    cout << device.get_encrypt() << endl;

    cout << "Done" << endl;
    int wait; cin >> wait;
}

在C4Droid(Android IDE)上,在显示"完成加密功能"后立即显示分段错误.C4Droid没有调试器,所以我将它加载到我的PC上的Code :: Blocks并运行调试器,但它运行没有错误.我尝试了不同的输入和键组合,但总是运行良好.有谁知道问题可能是什么?我的问题完全是关于奇怪的段错误.

1 个回答
  • encrypt方法中添加一个return语句.当前代码也为我抛出了一个分段错误,因为返回类型string是一个类,并且在执行encrypt返回的对象之后尝试被破坏,但返回值从未正确初始化.

    还要注意所有警告:

    ../src/Test.cpp: In member function ‘int Device::give_key(std::string)’:
    ../src/Test.cpp:26:1: warning: no return statement in function returning non-void [-Wreturn-type]
    ../src/Test.cpp: In member function ‘std::string Device::encrypt()’:
    ../src/Test.cpp:30:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    ../src/Test.cpp:63:1: warning: no return statement in function returning non-void [-Wreturn-type]
    ../src/Test.cpp: In member function ‘std::string Device::decrypt()’:
    ../src/Test.cpp:70:1: warning: no return statement in function returning non-void [-Wreturn-type]
    

    2023-02-07 17:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有