#c #dynamic #char #bus-error
Вопрос:
Я написал код, но есть одна проблема. Когда я cout<<""<<endl;
выхожу, у меня ошибка шины: 10. Как я могу решить эту проблему. Это мой код:
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstdlib>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <assert.h>
#include <ctime>
#include <sstream>
#include <iostream>
#include <iomanip>
using namespace std;
char* rotate(char const* a, int b)
{
char* r;
for (int i = 0; i < int(strlen(a)); i ) {
if (i >= int(strlen(a)) - b) {
r[i] = a[i - int(int(strlen(a)) - b)];
}
else if (i b < 0) {
r[i] = a[int(strlen(a) b)];
}
else {
r[i] = a[i b];
}
}
r[int(strlen(a))] = '';
return r;
}
char* Crypt(char* Input, bool Encrypt, int InitialRotation, int Rotation)
{
char const* Table;
try {
Table = new char[size_t(strlen(Table))];
}
catch (...) {
throw "No Memory";
};
char* a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
try {
a = new char[size_t(strlen(a))];
}
catch (...) {
throw "No Memory";
};
char* ActualTable;
try {
ActualTable = new char[size_t(strlen(ActualTable))];
}
catch (...) {
throw "No Memory";
};
int Offset = InitialRotation;
char* Resu<
try {
Result = new char[size_t(strlen(Result))];
}
catch (...) {
throw "No Memory";
};
int b;
Table = "JPGVOUMFYQBENHZRDKASXLICTW";
a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < int(strlen(Input)); i ) {
for (int c = 0; i < int(strlen(a)); c ) {
if (a[c] == Input[i]) {
b = c;
break;
}
}
cout << "" << endl;
ActualTable = rotate(Table, Offset);
Result[i] = rotate(Table, Offset)[b];
Offset = Offset Rotation;
}
return Resu<
}
int main()
{
char* A = "ZZZZ";
cout << Crypt(A, 1, 1, 4) << endl;
return 0;
}
Комментарии:
1. Не уверен, что именно может вызвать проблему, но в вашем коде много неопределенного поведения.
char *Resu< try { Result=new char[size_t(strlen(Result))]; }catch(...){ throw "No Memory"; };
и подобное просто не имеет никакого смысла. РазмерResult
есть … длина строкиResult
??2. почему вы используете
strlen
здесьTable=new char[size_t(strlen(Table))];
?Table
неинициализирован, и код имеет ub3. И какая от этого польза
a = new char[size_t(strlen(a))]
? Это не имеет смысла, возвращаясь кa
самому себе, заставляя вас потерять исходную строку. Вы делаете это много раз, в том числе и сTable = "JPGVOUMFYQBENHZRDKASXLICTW"
помощью .4. И помимо всего этого, вы также забываете о нулевом терминаторе строки во всех ваших распределениях. Почему вы вообще используете
char*
для своих строк, аstd::string
не ?5. Исправьте все эти предупреждения