指针访问有问题吗?

时间:2017-03-05 15:49:24

标签: c pointers

我希望我没有过度简化我的代码,但我基本上要做的是找到容器中元素的存在,并返回指向它的指针。

我有像

这样的结构
typedef struct INHs{
    int ID;
} INHs;

typedef struct sub_container{
    INHs** list_inh;
    int nb_list;
} sub_container;

typedef struct container {
    sub_container* cont;
    int nb_elem;
} container;

然后在我的main方法中我分配了一个容器(为了简单起见,我会将其留下来,并给出一个给定的ID;现在我不想迭代子容器来找到我的目标INHs结构)。

INHs** test_INH = NULL;
INHs** return_val = NULL;

int ID = 10;

container* cont; //allocated on all memory 

for (uint n=0; !test_INH && n<container_nb_elem; n++){

    return_val = find_ptr(&cont[n], ID, &test_INH);

}


INHs** find_ptr(sub_container* sub_cont, int ID, INHs*** test){

    INHs** res = NULL;

    for (uint i=0; !res && i<sub_cont->nb_list; i++){

      if (sub_cont->list_inh[i].ID == ID) {

         (*test) = &(sub_cont->list_inh[i]);
         res = &(sub_cont->list_inh[i]);
      }

    return res;
}

我知道我不需要我的元素的返回值和另一个作为函数参数的返回值,但这些是我尝试过的两个版本。我不知道我做错了什么但是valgrind崩溃告诉我要么&#34; test_INH&#34;或&#34; result_val&#34;是非初始化的,虽然我将它们设置为null。

有人看到我在这里缺少的东西吗?

1 个答案:

答案 0 :(得分:1)

typedef struct INHs{
    int id;
} INHs;

typedef struct sub_container{
    INHs **ptrs;
    int nb_list;
} sub_container;

typedef struct container {
    sub_container *items;
    int nb_elem;
} container;

int main(void)
{
INHs **found = NULL;
int id = 10;
container *cont; //allocated on all memory 

for (uint n=0; n < cont->nb_elem; n++){
    found = find_ptr( &cont->items[n], id);
    if (found) break; /* found it! */
    }

if(found) {
        /* do something useful with *found ... */
        }
return 0;
}

INHs **find_ptr(sub_container *sub_cont, int id)
{

for (uint i=0; i < sub_cont->nb_list; i++){
    if (sub_cont->ptrs[i]->id != id) continue;
    return &sub_cont->ptrs[i];
    }

return NULL;
}

BTW:我发现指向一个integer 结构的指针数组很奇怪。 这些结构都是malloc()d吗?