Я программирования на C, и есть два файла, func2.h:C - ошибка сегментации при доступе указателя в файле заголовка
#define NN 20
void network_construction(int **veins, int *num_veins){
int i, j;
for(i=0;i<NN;i++){
num_veins[i] = NN/2;
}
veins = malloc(NN * sizeof(*veins));
for (i = 0; i < NN; i++) { veins[i] = malloc(num_veins[i] * sizeof(*(veins[i]))); }
for (i = 0; i < NN; i++) { for (j = 0; j<num_veins[i];j++) { veins[i][j] = -1; } }
return;
}
и main.c:
#include <stdio.h>
#include <stdlib.h>
#include "func2.h"
void main(){
int num_veins[NN];
int **veins;
network_construction(veins, num_veins);
printf("\n%d\n", num_veins[19]);
printf("\n%d\n", veins[2][2]);
return;
}
num_veins [] дает правильный номер 10, но при попытке доступа к любым элементам вен они дают ошибку сегментации. Как я могу использовать в main.c значения вены, которые заполнены func2.h? Что я делаю неправильно и почему это происходит?
EDIT:
Эти коды представляют собой упрощенную версию более крупные. В ответах есть способ решить проблему, но это не совсем то, что я хочу. Мне нужно сделать динамическое распределение в func2.h
, поэтому я не хочу никаких вычислений с участием вен [] [] в main.c
перед вызовом network_construction().
вы можете начать с определения функции в файле '.c'. –
.. и возможный дубликат [this] (http: // stackoverflow.com/q/8543808/2173917) –
Итак, @SouravGhosh, я делаю это, а потом что? – oriol