C Ошибка памяти в структурах - PullRequest
0 голосов
/ 07 марта 2012

Следующий фрагмент кода вызывает ошибку памяти для больших значений MAXV.Как я могу определить эту структуру, чтобы я мог использовать ее для многих значений в краях и градусах?

#define MAXV  1441295   
typedef struct {
    edgenode *edges[MAXV+1];           
    int degree[MAXV+1];     
    int nvertices;      
    int nedges;         
    int directed;       
} graph;


initialize_graph(graph *g, bool directed)
{
    int i;              

    g -> nvertices = 0;
    g -> nedges = 0;
    g -> directed = directed;

    for (i=1; i<=MAXV; i++) g->degree[i] = 0;
    for (i=1; i<=MAXV; i++) g->edges[i] = NULL;
}

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Либо используйте динамическое выделение, либо увеличьте размер стека (утверждая Linux-подобную ОС), выполнив:

ulimit -s Размер 1000000

будет в кБ, следовательно, maxдопустимый размер стека будет ~ 100 МБ.

1 голос
/ 07 марта 2012

Читая из моего хрустального шара, я вижу, что вы создаете локальные переменные типа graph.Каждая из этих локальных переменных имеет размер более 10 000 000 байт, что приводит к переполнению доступного стекового пространства в вашей системе.

Попробуйте создать объекты как статические объекты или объекты, выделенные в куче.

Это не сделать это:

int f(graph g) {
   graph newg = g;
}

Скорее, сделать это:

graph g;
int f() {
  g.ediges[g.nedges++] = 0;
}

или это:

int f(graph *pg) {
  pg->edges[17] = 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...