Вот так гораздо лучше!
ifstream in("1.txt");//открываю файл для чтения
str = 1;
if(in) { //вычисляем
while(in.get(ch)) { //количество
if(ch == '\n') { //строк
str++; //в открытом файле для того
Я не уверен, что файл изначально не пуст. + по твоей логике счетчик показывает на одну строку больше. Вот к примеру.
Вот пример файла
123
456
789
В начала str=1. Считываем тройку - уже 2. И так далее. В итоге счетчик строк показывает 4.
t = new int*[str]; //выделяю память
Потому ты выделяешь на 1 строку больше, я так вижу.
Далее, что я нашел.
Пишешь ты, видимо, на MS VS 6, которая не знает о областях видимости. И из-за этого получаются ошибки. Чему равно
j?
in >> t[j]; //считываю матрицу из файла
Вот здесь ты обращаешься к j, но чему оно равно? Ты пишешь неизвестно куда.
К тому же.
Необходимо делать в цикле. За одно такое обращение оператор >> считывает один символ, судя логике. Еще раз посмотри на эту строку. Чему равно i? Оно постоянно одно и тоже значение.
Я вижу в коде утечку памяти. Ты неправильно удаляешь выделенную память.
Вот как нужно (на примере).
Код:
for (int i = 0; i<n; i++)
delete [] a[i];
delete [] a;