Программа выдает исключение. Думаю, это связано с тем, что динамический массив не строится с правильной емкостью [закрытC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Программа выдает исключение. Думаю, это связано с тем, что динамический массив не строится с правильной емкостью [закрыт

Сообщение Anonymous »

С программой было много проблем, но после множества проблем мне удалось заставить ее работать. Первой проблемой был конструктор, как многие написали ниже. установка емкости = емкости ничего не делает, поэтому вместо этого я сослался на нее с помощью указателя, и это было исправлено. Также я пытался смешать определенные темы с массивами указателей и простыми динамическими массивами, заполненными объектами, но это не помогло. Главный гвоздь в гроб всего этого был если посмотреть в деконструкторе. При первых запусках я даже не использовал его и не проверял терминал, когда он выдавал ошибку, но потом я это сделал и обнаружил две основные ошибки как в моем деструкторе, так и в функции удаления (я добавлю репозиторий github, чтобы увидеть завершенный не метательный проект). Основная ошибка заключалась в моем цикле for для деструктора и изменении положения для удаления. В деконструкторе я случайно использовал i = size вместо i < size, сколько раз это будет повторяться. Глупая ошибка, которая стоила мне многих часов. Если он говорит i = size, цикл for даже не срабатывает и не удаляет содержимое массива. Для функции удаления возникла аналогичная проблема. после удаления this->classRosterArray[2] я попытался переместить объект в конец массива, используя this -> classRosterArray[2] = this -> classRosterArray[size], проблема в том, что с он будет меняться в размерах, но на самом деле места для него не было, поэтому мне просто пришлось переключить [size] на [size - 1]. Спасибо всем, кто внес свой вклад, чтобы помочь мне. Не уверен, что я бы справился без всех вас. Спасибо
ОП ниже:
Я пишу школьный проект, в котором мне не разрешено использовать какие-либо внешние библиотеки (что действительно отстойно, поскольку В соответствии с требованиями проекта мне нужно создать динамический массив, а не вектор). Я считаю, что проблема в том, что когда я запускаю конструктор для своего динамического массива, он не присваивает моему массиву емкость. Беллоу — мой конструктор.

Код: Выделить всё

Roster::Roster(int capacity) {
capacity = capacity;
size = 0;
Student* classRosterArray = new Student[capacity];
а затем я вызываю его, используя Roster classRosterArray(5); в своей основной функции. Когда я смотрю на отладку, она показывает, что емкость classRosterArray равна 0. Я посмотрел, что другие люди сделали для этого задания, и они это сделали.

Код: Выделить всё

Roster::Roster(int capacity) {
this->capacity = capacity;
this->size = 0;
this->classRosterArray = new Student * [capacity];
Но даже когда я попробовал, он по-прежнему говорил, что емкость равна 0 при отладке, и все равно возникало исключение, и единственная разница в выводе заключалась в том, что он указывал this< /strong> был 0xFDFDFE75 (пытался сделать две звездочки с каждой стороны, но они были выделены жирным шрифтом), что, как я предполагаю, является просто указателем, который программа пыталась поместить в массив, для которого не было никакой емкости. Я новичок в C++, и указатели доставили мне огромную боль в заднице. Я помещу весь свой код ниже на случай, если это не то, что я думаю, но, судя по всей моей отладке и переработке, это кажется точкой останова.
main.cpp

Код: Выделить всё

#include 
#include "degree.h"
#include "student.h"
#include "roster.h"
using namespace std;

int commaSpotStart = 0;
int commaSpotEnd;
int commaDist;
string scrubbedID;
string scrubbedFName;
string scrubbedLName;
string scrubbedEmail;
string scrubbedAge;
string scrubbedD1;
string scrubbedD2;
string scrubbedD3;
string scrubbedDegree;
int convAge;
int convD1;
int convD2;
int convD3;
DegreeProgram convDegree;

void scrub(string stringStudent) {
commaSpotStart = 0;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
scrubbedID = stringStudent.substr(commaSpotStart, commaSpotEnd);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedFName = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedLName = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart); commaDist = commaSpotEnd - commaSpotStart;
scrubbedEmail = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedAge = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedD1 = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedD2 = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedD3 = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
commaSpotEnd = stringStudent.find(",", commaSpotStart);
commaDist = commaSpotEnd - commaSpotStart;
scrubbedDegree = stringStudent.substr(commaSpotStart, commaDist);
commaSpotStart = commaSpotEnd + 1;
}
void printStringStudent() {
int i = 0;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78158431/program-is-throwing-exception-think-it-is-due-to-dynamic-array-not-constructing[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»