У меня есть класс, содержащий массив указателей объектов в качестве его переменной-члена. В настоящее время у меня возникает проблема с тем, что компилятор копирует объект в конец массива, как когда я просматриваю программу, массив объектов читает, что его память не может быть прочитана. Кто-нибудь знает, в чем проблема?C++: компилятор не может прочитать массив объектов
void Notifications::operator+=(const iMessage& src) {
iMessage** temp2 = nullptr;
temp2 = new iMessage*[size+1];
if (size != 0){
for (int i = 0; i < size; i++) {
*temp2[i] = *messages[i];
}
}
*temp2[size] = src; //compiler states that it cannot read the data from temp2 after this point
delete[]messages;
for (int i = 0; i < size + 1; i++) {
*messages[i] = *temp2[i]; //Unhandled exception at 0x00C58F99 in w5.exe: 0xC0000005: Access violation reading location 0x00000000.
}
size++;
}
Notifications.h
#include "iMessage.h"
#include <vector>
namespace w5 {
class Notifications {
int size;
iMessage **messages;
public:
Notifications();
Notifications(const Notifications&);
Notifications& operator=(const Notifications&);
Notifications(Notifications&&);
Notifications&& operator=(Notifications&&);
~Notifications();
void operator+=(const iMessage&);
void display(std::ostream&) const;
};
}
IMessage.h
#ifndef _I_MESSAGE_H_
#define _I_MESSAGE_H_
// Workshop 5 - Containers
// iMessage.h
#include <iostream>
#include <fstream>
namespace w5 {
class iMessage {
public:
virtual void display(std::ostream&) const = 0;
virtual iMessage* clone() const = 0;
virtual bool empty() const = 0;
};
iMessage* getMessage(std::ifstream&, char);
}
#endif
Message.h
#include "iMessage.h"
namespace w5{
class Twitter : public iMessage {
std::string msg;
public:
Twitter(char, std::ifstream&);
virtual void display(std::ostream&) const;
virtual iMessage* clone() const;
virtual bool empty() const;
};
class Email : public iMessage {
std::string msg;
public:
Email(char, std::ifstream&);
virtual void display(std::ostream&) const;
virtual iMessage* clone() const;
virtual bool empty() const;
};
}
Просто используйте 'вектор>'. И ваш 'iMessage' должен иметь виртуальный деструктор. Кроме того, компилятор говорит, что он не может прочитать массив, а затем сработает? Как и в, он создает внутреннюю ошибку компилятора? Я считаю, что трудно поверить. Какой компилятор, версия и какое сообщение об ошибке вы получаете? –
Я могу порекомендовать реорганизовать функцию. Не могу принять «образ мышления», извините. – i486
Вы косвенны через 'temp2 [i]' перед тем, как выделить место для него. – Barmar