基本的に、ここで達成しようとしているのは、コンパイル時にサイズがわからない構造体へのポインターの配列を持つグローバル変数を持つことです。以下の例では、my_struct **tab
です。最終バージョンでは、ポインターの配列を初期化するJNIメソッドを呼び出し、他のメソッドの使用のためにそれらを保持したいと思います。
残念ながら、私はCプログラマーではなく、この問題に本当に苦労しています。以下に、私がやろうとしたことを示します。明らかに、それは機能していません。建設的なフィードバックは本当に役に立ちます。
(Cコードであるはずのインクルードを誤解してすみません)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int tag;
} my_struct;
my_struct **tab;
void * get_pointer_to_struct() {
my_struct * s;
/* allocate memory */
if ((s = (my_struct *) malloc(sizeof (my_struct))) == NULL) {
return NULL;
}
return s;
}
void free_structures(int j) {
for (int a; a < j; a++) {
my_struct *s;
s = (my_struct *) tab[a];
/* free memory */
free(s);
tab[a] = NULL;
}
}
void init_pointers_array(int j) {
my_struct * temp_arr[j];
for (int i = 0; i < j; i++) {
temp_arr[i] = (my_struct *) get_pointer_to_struct();
temp_arr[i]->tag = i;
}
tab = temp_arr;
}
int main() {
//initialization
init_pointers_array(10);
//usage
for (int a = 0; a < 10; a++) {
if (tab[a]) {
my_struct * str_tmp = tab[a];
printf("Integer that you have entered is %d\n", str_tmp->tag);
}
}
//free mem
free_structures(10);
return 0;
}