C++ 更改c+中的参数值+;

C++ 更改c+中的参数值+;,c++,dynamic,for-loop,arguments,C++,Dynamic,For Loop,Arguments,为什么更改for循环中的参数会使程序崩溃?C++的动态性是否太强? for(unsigned int x = 0; x < mystring.size(); x++) mystring = mystring.substr(0, mystring.size()); for(unsigned int x=0;x0),我的程序仍然崩溃 编辑: 嗯。你们是对的,代码不会因为mystring值的改变而崩溃。但是,此代码非常简单,我不知道错误来自何处: template <class

为什么更改for循环中的参数会使程序崩溃?C++的动态性是否太强?

for(unsigned int x = 0; x < mystring.size(); x++)
    mystring = mystring.substr(0, mystring.size());
for(unsigned int x=0;x
当我更改实际代码来执行此操作时(mystring.size()>0),我的程序仍然崩溃

编辑:

嗯。你们是对的,代码不会因为mystring值的改变而崩溃。但是,此代码非常简单,我不知道错误来自何处:

template <class Algorithm>
class ECB{  // Electronic codebook
  private:
    Algorithm algo;
    uint8_t blocksize;

  public:
    ECB(Algorithm instance, std::string = "")
      : algo(instance) {
        blocksize = algo.blocksize() >> 3;
      }

    std::string encrypt(std::string data){
        data = pkcs5(data, blocksize);

        return data;
    }

    std::string decrypt(std::string data){

        return remove_padding(data);
    }
};
模板
ECB类{//电子码本
私人:
算法;
uint8_t块大小;
公众:
ECB(算法实例,std::string=“”)
:algo(实例){
blocksize=algo.blocksize()>>3;
}
std::string加密(std::string数据){
数据=pkcs5(数据,块大小);
返回数据;
}
std::字符串解密(std::字符串数据){
返回删除填充(数据);
}
};

请不要将我链接到教我如何使用ECB的网站。它不像是硬的。但是,此代码很烦人

这不应该崩溃。实际上,您所做的是将同一字符串赋给同一变量n次,其中n是字符串的长度。这在C++中是完全合法的。您没有告诉我们完整的故事

这似乎与您未包含的周围代码有关

假设mystring是std::string,则该赋值是无值的。而你的循环什么也不做。

我(g++4.4.5)没有崩溃,这正是我尝试的代码:

#include <iostream>
#include <string>

using namespace std;

int main() {

string mystring = "hello";

for(unsigned int x = 0; x < mystring.size(); x++)
mystring = mystring.substr(0, mystring.size());
}
#包括
#包括
使用名称空间std;
int main(){
string mystring=“hello”;
for(无符号整数x=0;x
循环是正确的(尽管如前所述,它不起任何作用),因此您可能在某个地方弄乱了内存空间。通过valgrind运行您的程序,您应该会发现问题。

C标准明确规定“argv”值是可修改的。它是如何崩溃的?@Jim:argv值有什么作用?什么参数?密码在哪里?您发布的代码是100%正确的。“旧问题片段”与
ECB
模板类之间有什么关系?我在代码中看不到链接我在代码中尝试了这个,for循环中除了我所展示的内容之外,没有任何内容,它仍然存在crashes@calccrypto你如何发布一个完整的C++程序,包括主程序等等,只做你声称崩溃的程序。也许您以一种奇怪的方式初始化字符串……问题不在循环内部,而是在周围的代码中。发布完整代码,please@calccrypto:看看@Bálint Fodor的例子。您是否声称示例在您的计算机上崩溃?mystring是一个std::string,其中包含字符,如
std::string mystring=“abcd”