Top.Mail.Ru
Ответы
Аватар пользователя
10лет
Изменено
Аватар пользователя
Аватар пользователя
Программирование
+1

Помогите с С++

вылетает экзепшн на строке "FamilyAndOld[i][0] = i + 1;" что Необработанное исключение по адресу 0x011F4522 в ConsoleApplication16.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD.

Какие ещё блин права от меня требуют я всего-то создаю динамический двумерный массив

#include <iostream>

using namespace std;

int main()

{

char container[6];

int S, FamilyId;

FILE *file;

if((file = fopen("D:\\OUTPUT.txt","rt")) != NULL)

{

fgets(container, 10000, file);

S = atoi(container);

fgets(container, 10000, file);

FamilyId = atoi(container);

fclose(file);

}

char **FamilyAndOld = new char*[FamilyId];

for (int i = 0, j = 25; i < FamilyId; i++, j--)

FamilyAndOld = new char* [j];

for (int i = 0; i < FamilyId; i++)

{

for (int j = 0; j < 25; j++)

{

FamilyAndOld[i][0] = i + 1;

}

}

По дате
По рейтингу
Аватар пользователя
Новичок
10лет

#include <iostream>
using namespace std;
int main() {
char** p = nullptr;
int r, c;
cin >> r >> c;
// выделение памяти
if (p = new(nothrow) char*[r]) {
for (int i = 0; i < r; ++i) {
if (p[i] = new(nothrow) char[c]);
else {
for (int j = 0; j < i; ++j) if (p[j]) delete[] p[j];
if (p) delete[] p;
p = nullptr;
break;
}
}
}
// TODO:
// освобождение памяти
if (p) for (int i = 0; i < r; ++i) if (p[i]) delete[] p[i];
if (p) delete[] p;
p = nullptr;
return 0;
}

Аватар пользователя
Искусственный Интеллект
10лет

FamilyAndOld = new char*[FamilyId];//FamilyAndOld указывает на новый массив указателей

for (int i = 0, j = 25; i < FamilyId; i++, j--) FamilyAndOld = new char* [j];//FamilyAndOld указывает на другой новый массив указателей в каждом проходе цикла


FamilyAndOld[i][0] = i + 1;//по адресу FamilyAndOld[i], где находится неинициализированный указатель, берется указатель и по нему что-то записывается.. .

Аватар пользователя
Просветленный
10лет

Пользуйтесь списками и векторами. А то что он ругается означет что вы обратились к несуществующему элементу (или проще говоря ваш динамический двумерный массив создается не верно) .
проще было бы сделать так std::List<std::List<char> *> *mylist;
mylist= new std::List<std::List<char> *>;
мы получили корень
mylist->append(new std::List<char>); мы получили нулвую строку
mylist->at(0)->apped('a'); первый элемент