시도해 보았지만 코드에서 실수를 찾아 냈지만 여전히 찾을 수 없습니다. 스택 클래스의 앨범이 있는데, 크기를 조정하고 싶다고 생각합니다. 하지만 어떤 이유 때문에 대부분의 경우 프로그램이 충돌하고 10 개 중 하나가 정상적으로 작동하고 이유가 전혀 없습니다. 실수를 지적하면 큰 문제가 될 수 있습니다. 그래서 여기에 코드입니다 :스택 크기 조정을 위해 메모리를 할당 할 때 문제가 발생했습니다.
const Song Song::null_song;//static from Song class
class Album
{
Song* songs;
char* name;
int top;
int capacity;
bool full() const;
void resize();
public:
...
}
그리고 여기에 내가 다음 앨범에서 미리 정의 된 INIT_CAPACITY 더 많은 항목을 밀어하려고 할 때 어딘가에에서 culprit.The 문제가 발생되고, 기능되는 = 4 문제가 새로운 메모리를 할당해야합니다.
귀하의Song
도 사용
char*
이
std::string
를 사용한다
const int INIT_CAPACITY=4;
std::ostream& operator<<(std::ostream& os, Album& p)
{
os<<"Name of Album:"<<p.name<<std::endl;
for(int i=0;i<=p.top;i++)
os<<p.songs[i]<<std::endl;
}
Album::Album(const char* p)
{
int len1=strlen(p);
name=new char [len1+1];
strcpy(name,p);
top=-1;
songs = new Song[INIT_CAPACITY];
capacity = INIT_CAPACITY;
}
Song Album::pop()
{
if (empty())
return Song::null_song;
return songs[top--];
}
Song Album::last() const
{
if (empty())
return Song::null_song;
return songs[top];
}
bool Album::push(Song x)
{
if (full())
resize();
songs[++top] = x;
return true;
}
void Album::resize()
{
capacity *= 2;
Song* newsongs = new Song[capacity];
for(int i = 0; i < capacity/2; i++)
newsongs[i] = songs[i];
delete[] songs;
songs = newsongs;
}
bool Album::empty() const
{
return top == -1;
}
bool Album::full() const
{
return top == capacity-1;
}
Album::Album()
{
top=-1;
songs = new Song[INIT_CAPACITY];
capacity = INIT_CAPACITY;
name=new char [1];
name[0]='\0';
}
Album::~Album()
{
delete [] songs;
delete [] name;
}
안녕하세요. 코드에서 오류를 발견하도록 사람들에게 요청하는 것은 특히 생산적이지 않습니다. 디버거를 사용하거나 인쇄 문을 추가하여 프로그램의 진행 상황을 추적하고 발생할 것으로 예상되는 것과 비교하여 문제를 격리해야합니다. 이 둘이 갈라지면 문제를 발견했습니다. (그리고 필요하다면 [최소 테스트 케이스] (http://stackoverflow.com/help/mcve)를 구성해야합니다.) –
std :: string과 std :: vector를 사용하고 new를 사용하지 않고 delete 문제는 사라질 것입니다. – paulm
@OliCharlesworth 잘 보았습니다. 그러나 당신이 볼 수 있듯이 나는 여전히 프로그래밍에 능숙하지 못했습니다. 내가 작성한대로 INIT_CAPACITY에서 소리내어 읽는 것보다 많은 항목을 가지고 자 할 때 문제가 나타납니다. 문제는 내가 논리에서 문제가 있다고 생각하는데, 이것은 찾기가 더 어렵습니다. – user3144334