/ / Зміна значень аргументів у c ++ [закрито] - c ++, динамічні, for-loop, аргументи

Зміна значень аргументів у c ++ [замкнуто] - c ++, динамічні, аргументи for-loop

Чому зміна аргументу в циклі for збою програми? це занадто динамічно для c ++?

for(unsigned int x = 0; x < mystring.size(); x++)
mystring = mystring.substr(0, mystring.size());

коли я змінив свій реальний код, щоб зробити це (mystring.size ()> 0), моя програма все одно вийшла з ладу

EDIT:

в порядку. Ви, хлопці, мали рацію, код не виходить з ладу через зміну значення 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);
}
};

будь ласка, не посилайте мене на сайти, щоб навчити мене користуватися ЄЦБ. його не люблять його важкий. однак цей код дратує

Відповіді:

6 за відповідь № 1

Це не повинно падати. Що ви фактично робите, це присвоєння одного і того ж рядка тій самій змінній n разів, де n - довжина рядка. Це цілком законно в C ++. Ви не розповідаєте нам всю історію


3 для відповіді № 2

Для мене він не виходить з ладу (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());
}

2 для відповіді № 3

Це виглядає проблемою з оточуючим кодом, який ви не включали.

Якщо припустити, що mystring є std :: string, це призначення не має значення. і ваш цикл нічого не робить.


2 для відповіді № 4

Цикл правильний (хоча він нічого не робить, як зазначалося), тому ви, мабуть, десь зіпсуєте простір пам'яті. Запустіть програму через valgrind, і ви повинні знайти проблему.