Hallo,
Ik ben bezig met een programmatje te schrijven in C, maar ik heb een probleem om een array van pointers naar struct te initializeren.
In clion geeft de regel met de pijl mij een runtime error:
Signal: SIGSEGV (Segmentation fault)
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Dus volgens mij is de array niet juist aangemaakt. Hoe doe ik dit het best? Maak ik ook het geheugen correct weer vrij?
EDIT:
Ik moet de pointer ook alloceren. Maar nu geeft ie dezelfde foutmelding op de functie calc_means(ptr_mat, ptr_mat*)
Ik ben bezig met een programmatje te schrijven in C, maar ik heb een probleem om een array van pointers naar struct te initializeren.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| typedef uint8_t size_m; typedef float T; typedef struct { size_m n_rows; size_m n_cols; T* mat; } matrix; typedef matrix* ptr_mat; void mat_free(ptr_mat x) { free(x->mat); } void ptr_mat_free(ptr_mat x) { free(x->mat); free(x); } void calc_means(ptr_mat means, ptr_mat* means_sens); int main(void) { uint8_t sen = 0, sensor_count = 4; uint8_t feature_count = 6, class_count = 10; uint8_t total_feature_count = feature_count*sensor_count; ptr_mat means = malloc(sizeof(*means)); means->n_rows = class_count; means->n_cols = total_feature_count; means->mat = calloc(means->n_rows * means->n_cols, sizeof(*means->mat)); ptr_mat means_sens[sensor_count]; for (; sen < sensor_count; ++sen) { means_sens[sen] = malloc(sizeof(*means_sens[sen])); //pointers alloceren means_sens[sen]->n_rows = class_count; means_sens[sen]->n_cols = feature_count; means_sens[sen]->mat = calloc(means_sens[sen]->n_rows * means_sens[sen]->n_cols, sizeof(*means_sens[sen]->mat)); } calc_means(means, means_sens); //<-- foutmelding mat_print(means) for (sen = 0; sen < sensor_count; ++sen) mat_print(means_sens[sen]); ptr_mat_free(means); for (sen = 0; sen < sensor_count; ++sen) mat_free(means_sens[sen]); return 0; } |
In clion geeft de regel met de pijl mij een runtime error:
Signal: SIGSEGV (Segmentation fault)
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Dus volgens mij is de array niet juist aangemaakt. Hoe doe ik dit het best? Maak ik ook het geheugen correct weer vrij?
EDIT:
C:
1
2
3
4
5
6
7
| ptr_mat means_sens[sensor_count]; for (; sen < sensor_count; ++sen) { means_sens[sen] = malloc(sizeof(*means_sens[sen])); means_sens[sen]->n_rows = class_count; means_sens[sen]->n_cols = feature_count; means_sens[sen]->mat = calloc(means_sens[sen]->n_rows * means_sens[sen]->n_cols, sizeof(*means_sens[sen]->mat)); } |
Ik moet de pointer ook alloceren. Maar nu geeft ie dezelfde foutmelding op de functie calc_means(ptr_mat, ptr_mat*)
[ Voor 16% gewijzigd door Swedgin op 02-08-2017 23:31 . Reden: typo ]