增加struct segfaults的成员

时间:2016-02-09 01:31:31

标签: c memory struct segmentation-fault malloc

我试图增加一个struct(一个int)的值只是为了测试我的代码片段(这不是我的整个代码),只是我的问题的焦点。我给出了结构:

typedef struct Test Test;
typedef struct Test {
    char * name;
    int numOfElements;
    Test * test[];
}Test;

以及功能:

void startFunc(Test ** newStruct) {

    newStruct = malloc(sizeof(Test));

    (*newStruct)->name = NULL;
    (*newStruct)->numOfElements = 0;

    func(newStruct);

}

void func(Test ** newStruct) {

    (*newStruct)->numOfElements++;

}

//create function to later free allocated memory

然而,增加numOfElements的值似乎是段错误。事实是我没有分配足够的内存(因为我使用的是灵活的阵列成员吗?)

我尝试使用valgrind并在(*newStruct)->name =NULL;

上读取了大小为8的无效内容

这表明它没有被录取,这里的记忆帮助将非常感激,

1 个答案:

答案 0 :(得分:2)

malloc(sizeof(Test))旨在分配类型为Test的原始对象,因此在概念上它会返回Test *指针。此指针已分配给newStruct,即Test **Test *Test **之间的这种不匹配已经表明malloc行被破坏了。

立即猜测就是这个

newStruct = malloc(sizeof(Test));

实际上是打算

*newStruct = malloc(sizeof(Test));

您已经在*newStruct的任何地方严格使用startFunc,但出于某种原因,malloc行完全忘记了它。

表达同样事情的一种可以说是更好的方法是

*newStruct = malloc(sizeof **newStruct);