2012-03-07 1 views
0

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

#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; 
} 
+0

В чем проблема с ошибками во время компиляции? ошибка выполнения? – MByD

+2

Этот фрагмент ** не может ** вызвать ошибку памяти, он создает только тип, а не любые переменные. Пожалуйста, предоставьте ** полную ** минимальную программу, которая демонстрирует вашу ошибку. http://sscce.org –

+0

Какая ошибка памяти возникает? Эта программа не может вызвать ошибку времени компиляции. Это может привести к ошибке во время выполнения, если у вас недостаточно памяти. – owagh

ответ

1

Чтение из моей хрустальный шар, я вижу, что вы создаете локальные переменные типа . Каждая из этих локальных переменных превышает 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; 
} 
1

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

ULIMIT -s 1000000

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