Написано же, используй константу. Code: const int nMaxThreads = 1000; int nThreads = StrToInt(Edit1->Text); Thread *thr[nMaxThreads]; for(int i=0;i<nThreads;i++){ thr[i] = new Thread(false); }
Всем привет. Проблема в следующем. Code: #include <iostream> #include <cmath> #include <fstream> using namespace std; void Diagonal(double **A, int NumberOfEquation) { double *temp_massiv; int i, j; double max, replace; temp_massiv = new double[NumberOfEquation]; for(i = 0;i < NumberOfEquation;i++){ max = A[i][0]; for(j = 0;j < NumberOfEquation;j++){ if(A[i][i] != 0) continue; else{ if(A[i][j] >= max) max = A[i][j]; temp_massiv[i] = max; } } } for(i = 0;i < NumberOfEquation;i++){ for(j = 0;j < NumberOfEquation;j++){ if(A[i][j] == temp_massiv[i]){ replace = A[i][i]; A[i][i] = A[i][j]; A[i][j] = replace; } } } delete []temp_massiv; } int SimpleIteration(double **A, double *B, int NumberOfEquation, double *solution, double fault_input) { int i, j, step = 1; double *TempSolution; TempSolution = new double[NumberOfEquation]; double fault = fault_input + 1; for(i = 0;i < NumberOfEquation;i++) { for(j = 0;j < NumberOfEquation;j++) { if(i != j) { A[i][j] = -A[i][j] / A[i][i]; } } B[i] = B[i] / A[i][i]; A[i][i] = 0; } for(i = 0;i < NumberOfEquation;i++) { solution[i] = B[i]; } while(fault > fault_input && step <= 1000) { for(j = 0;j < NumberOfEquation;j++) { TempSolution[j] = 0; } for(i = 0;i < NumberOfEquation;i++) { for(j = 0;j < NumberOfEquation;j++) { TempSolution[i] = TempSolution[i] + A[i][j]*solution[j]; } TempSolution[i] = TempSolution[i] + B[i]; } fault = 0.0; for(j = 0;j < NumberOfEquation;j++) { fault = fault + (solution[j] - TempSolution[j])*(solution[j] - TempSolution[j]); } fault = sqrt(fault); for(j = 0;j < NumberOfEquation;j++) { solution[j] = TempSolution[j]; } step++; } delete []TempSolution; return step; } void file_input_output(){ int i, j, row = 0, column = 0; double **A, *B, *solution, **temp_matrix, fault_input; char k[128]; //вычисляем размерность введенной расширенной матрицы системы ifstream in("input_data.txt"); while(true) { in.read(k, 1); if(k[0] == ' ') column++; if(k[0] == '\n'){ row++; column++; } if(in.eof()){ row++; column++; break; } } column = column/row; in.close(); //выделяем память под матрицу коэффициентов при неизвестных A = new double*[row]; for(i = 0;i < row;i++){ A[i] = new double[row]; } //выделяем память под вектор свободных членов B = new double[row]; //выделяем память под вспомогательную матрицу temp_matrix = new double*[row]; for(i = 0;i < column;i++){ temp_matrix[i] = new double[row]; } //выделяем память под вектор неизвестных solution = new double[row]; //считываем матрицу во временный массив ifstream fin("input_data.txt"); for(i = 0;i < row;i++){ for(j = 0;j < column;j++){ fin >> temp_matrix[i][j]; } } fin.close(); //из временного массива выбираем нужные элементы //для матрицы коэффициентов при неизвестных for(i = 0;i < row;i++){ for(j = 0;j < column - 1;j++){ A[i][j] = temp_matrix[i][j]; } } //для вектора свободных членов for(i = 0;i < row;i++){ for(j = column - 1;j > column - 2;j--){ B[i] = temp_matrix[i][j]; } } Diagonal(A, row); cout << "Введите точность вычислений: "; cin >> fault_input; int steps = SimpleIteration(A, B, row, solution, fault_input); if(steps > 1000) { cout << "Ошибка!!! Возможные причины:\n"; cout << "1)Слишком большое количество итераций.\n"; cout << "2)Какие-либо строки(столбцы) линейно зависимы.\n"; } else { ofstream out("solution.txt"); out << "Решение СЛАУ:\n"; for(j = 0;j < row;j++) { out << solution[j] << "\n"; } out << "Количество итераций: " << steps; cout << "Результат вычислений записан в файл 'solution.txt'.\n"; out.close(); system("solution.txt"); } //очищаем выделенную память, здесь все нормально for(i = 0;i < row;i++) { delete []A[i]; } delete []A; delete []B; delete []solution; //а вот на этом месте,при очистки памяти выделенной под временный //массив, прога при работе выдает ошибку(компилится все норм) for(i = 0;i < column;i++){ delete []temp_matrix[i]; } delete []temp_matrix; } int main() { cout << "Данная программа предназначена для решения СЛАУ методом простых итераций.\n"; file_input_output(); system("pause"); return 0; } Вот сама ошибка, среда VS2010. Code: Debug Assertion Failed! ... Expression:_CrtIsValidHeapPointer(pUserData) ... Плиз, помогите разобраться что не так, просто раньше норм все работало, а щас че т не хочет.
Code: 10 1 1 12 2 10 1 13 2 2 10 14 Все элементы записаны через пробел, лишних нет(пробелов).Количество сторок и столбцов в функции file_input_output() вычисляется верно, проверял.И, кстати, когда открывается файл "solution.txt" решение в нем верное записано. P.S. какими функциями можно проверить состояние памяти, как например MemAvail и MaxAvail в паскале?
а какую точность вводить? вроде считает, результаты выводит, но по закрытию пишет что куча повреждена)) у меня VS 2008 TS
Вот таже хрень, точность можно любую, к тому примеру, который я написал, достаточно 0.0001 , и прога выдаст точное решение (1 1 1).Можно конечно убрать Code: for(i = 0;i < column;i++){ delete []temp_matrix[i]; } delete []temp_matrix; и все будет норм работать, но хотелось разобраться, да и память замусоривать нехорошо)) Вот блин, ща попробовал в CodeBlocks скомпилить и запустить, и о чудо, там все норм.
Пробовал, тоже самое.Кстати,еще вот это сообщение VS выводит Code: Windows has triggered a breakpoint in SLAU.exe. This may be due to a corruption of the heap, which indicates a bug in SLAU.exe or any of the DLLs it has loaded. This may also be due to the user pressing F12 while SLAU.exe has focus. The output window may have more diagnostic information.
разберитесь где у вас column а где row... я пытался понять, но сложилось такое впечатление, что они перепутаны в каждой второй строке. вот кстати как делаются матрицы:
Все, разобрался.Спасибо всем за помощь. У меня получалась матрица(в примере) 3х4, а я выделял память для 4х3))).Тогда следующий вопрос-почему CodeBlocks эт пропустил?))
Особенно большое СПАСИБО P.S. какими функциями можно проверить состояние памяти, как например MemAvail и MaxAvail в паскале?
Как лучше организовать потоки в бруте: 1 поток = 1 пароль, 1 поток = 10 паролей или др? И можно ли передать потоку 2 параметра (структуры использовать не хочется)? PS: брут серверов
ну уж точно не 1 поток на 1 пароль. так у тебя поток может создаваться дольше чем идёт проверка одного пасса. всё зависит от скорости. делай значение переменным и пробуй изменять. смотри как прога реагирует. лично я бы так делал.
Code: procedure klickkor(korX:integer;korY:integer); // p - пауза в секукндах var Pt: TPoint; begin Pt.x := korX; Pt.y := korY; {Преобразуем Pt к координатам экрана} Pt := ClientToScreen(Pt); {Преобразуем Pt к "mickeys" (аболютным координатам курсора мышки} Pt.x := Round(Pt.x * (65535 / Screen.Width)); Pt.y := Round(Pt.y * (65535 / Screen.Height)); {Переместим курсор мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0); {Имитируем нажатие левой кнопки мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0); {Имитируем отпускание левой кнопки мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0); end; однако вылазит ошибка Code: Unit1.pas(225): Incompatible types: 'HWND' and 'TPoint Что я не так делаю?
Народ, переведите плиз следующий код из С++ на С, а именно потоковый вывод через printf(), заранее спасибо. Code: //N101 #include <iostream.h> #include <conio.h> int main() { int i,j,k1,k2,n; n=10000000 ;//до какого числа считать cout << "Numbers(less then 1000000), the sum of numbers of which is divided on 7.\n\n"; for (i=2;i<n;i++){ j=i+1; k2=0; while (j>0){ k2+= j%10; j/=10; } if (k1%7==0 && k2%7==0){ cout << "Number is: "; cout << i << "\n"; } k1=k2; } cout << "\n"; getch(); return 0; }
Code: //N101 #include <stdio.h> int main() { int i, j, k1, k2, n; n = 10000000 ; printf( "Numbers(less then 1000000), the sum of numbers of which is divided on 7.\n\n" ); for ( i = 2; i < n; i++ ) { j = i + 1; k2 = 0; while( j > 0 ) { k2 += j % 10; j /= 10; } if ( k1 % 7 == 0 && k2 % 7 == 0) { printf( "%s: %d \n", "Number is", i ); } k1 = k2; } printf( "\n" ); getch(); return 0; } Но сразу скажу, что твой код не корректен.