如何初始化指针类型struct元素

时间:2015-08-13 20:00:48

标签: c pointers struct

{
   "error": {
      "message": "Invalid redirect_uri: Given URL is not permitted by the Application configuration",
      "type": "OAuthException",
      "code": 191
   }
}

我遇到了碎片错误。这似乎是导致它的陈述:p.g.h-> m =& l;。我已经尝试过但无法想出一种初始化指针m的方法。

5 个答案:

答案 0 :(得分:3)

你的p.g.h指针指向Nirvana!

您应首先定义type_tt变量,然后初始化其m指针。然后初始化p.g.h指针。

int main(int argc, char const *argv[])
{
    mstr p;
    type_tt t;
    int l = 42;

    t.m = &l;
    p.g.h = &t;

    printf("l = %i\n", *p.g.h->m);

    return 0;
}

答案 1 :(得分:1)

你得到分段错误,因为你忘了用一些新的内存初始化指针或者在你解除引用那个指针之前为它分配现有的内存。

int main(int argc, char const *argv[])
{
    int l;
    mstr p;
     // initialize with new memory (from heap)
    p.g.h = malloc(sizeof(*p.g.h));
    if(p.g.h == NULL)
        return -1;
    p.g.h->m = &l;
    free(p.g.h);
    // or use existing memory (from stack)
    type_tt t;
    p.g.h = &t;
    p.g.h->m = &l;
    // now you can do something very useful with p.g.h->m
    // print it maybe
    printf("*p.g.h->m is [%d]\n", *p.g.h->m);
    return 0;
}

答案 2 :(得分:0)

就像@Martin R1所说,p.g.h是一个未初始化的指针。你必须先为它分配内存。

p.g.h = malloc( sizeof( type_tt ) );   /// C99
assert( p.g.h != NULL );

p.g.h->m = &l;

完成后不要忘记释放内存..

答案 3 :(得分:0)

让我们来看看这里发生了什么:

您正在分配int和类型为mstr的结构。 int的分配非常简单,但你的结构呢? 当你分配mstr p时,它为int和2个指针分配足够的内存:一个指向char的指针,另一个指向type_tt结构。重要的是要注意你没有分配type_tt结构,而是指向它的指针。你仍然需要分配sizeof(type_tt)的内存,p.g.h应该指向......有意义吗?

所以,像这样:

...
int l;
mstr p;
type_tt h;
p.g.h = &h;
p.g.h->m = &l;
...

答案 4 :(得分:-2)

您尚未初始化p.g.h

您可以将其初始化为:

int main(int argc, char const *argv[]) {
    int l;
    mstr p;
    p.g.h = new type_tt;
    p.g.h->m = &l;
    return 0;
}  

====

更新

指针的默认值不为null,可以是任意值。

如果您在C中,则应使用malloc代替new

p.g.h = (type_tt*) malloc(sizeof(type_tt));