我试图增加一个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;
这表明它没有被录取,这里的记忆帮助将非常感激,
答案 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);