Я написал следующий код. Он хорошо работает на некоторых входах, но показывает ошибку на некоторых других.Следующий код на C++ дает некоторую ошибку выделения памяти
Например, при попытке ввода:
он показывает следующее сообщение об ошибке так же, как я ввести второй (без ожидания третьей линии)
a.out: malloc.c:2395: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
В чем может быть причина?
#include <iostream>
#include <list>
#include <cmath>
using namespace std;
void addEdge(list<int> *adj, int a, int b)
{
adj[a].push_back(b);
}
int count = 1;
int dfsVisit(int i, bool *visited,list<int> *adj)
{
visited[i] = true;
list<int> ::iterator k;
for(k=adj[i].begin(); k!=adj[i].end();k++)
{
if(!visited[*k])
{
count ++;
dfsVisit(*k, visited, adj);
}
}
return count;
}
int main()
{
list<int> *adj;
long int n,i,j,a,b,m=0,k;
long int arr[1000000];
cin>>n>>i;
bool *visited = new bool;
for(j=0;j<n;j++)
{
visited[j] = false;
}
adj = new list<int>[n];
for(j=0;j<i;j++)
{
cin>>a>>b;
addEdge(adj, a,b);
}
for(k=0;k<n;k++)
{
if(visited[k]==false)
{
count = 1;
arr[m] = dfsVisit(k, visited, adj);
m++;
}
}
/*for(k=0;k<m;k++)
{
cout<<arr[k];
}*/
long int ans = 1;
if(m>1)
{
for(k=0;k<m;k++)
{
ans = ans * arr[k];
}
}
if(m==1)
{
ans = 0;
}
cout<<ans;
}
Посещение не имеет выделенной памяти. – Shiping
Помните, что локальные переменные, включая массив, обычно хранятся в стеке и что стек ограничен. Например, размер стека по умолчанию в Windows - это один MB. В Linux размер стека по умолчанию составляет 8 МБ. Ваш массив 'arr' в функции' main' сам по себе составляет почти 8 МБ в системе с 64-разрядной «длинной» (например, типичной 64-битной системой Linux). Ты живешь на краю! –
Я абсолютно уверен, что вы не хотите 'adj = новый список [n];'. Вам не нужны 'n списки'. Контраст с 'новым bool', где вам на самом деле *** нужно ***' n bools'. Также ваши '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –