gpt4 book ai didi

C 谜题——指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:36 25 4
gpt4 key购买 nike

基本上,我在这里试图实现的是让全局变量具有指向结构的指针数组,其大小在编译时是未知的——在我下面的示例中,它是 my_struct **tab。在最终版本中,我想调用一个 JNI 方法来初始化我的指针数组,我想保留它们以供其他方法使用。

不幸的是,我不是 C 程序员,我真的很难解决这个问题。下面我展示了我尝试做的事情;显然,这是行不通的。任何建设性的反馈都会非常有帮助。

(很抱歉误会了 includes 它应该是 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;
}

最佳答案

这段代码太难读了,我很惊讶有人愿意阅读它。遵循这些准则,您的所有问题都将得到解决:

  • 使用 std::vector(或类似的数组类)代替原始数组
  • 如果你不需要,不要使用动态分配,但如果你确实使用new而不是malloc
  • 无论何时使用动态分配,都在拥有该对象并遵循 RAII 原则的类中进行
  • 不要使用全局变量

关于C 谜题——指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com