gpt4 book ai didi

c - 指向结构指针的空指针

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

我在将 void 指针分配给另一个结构指针时遇到问题。我的输入参数在函数 semaphoreCreateBinary 中改变了,但是当它返回到 main 时它又是空的。我可能必须做某种类型转换,但我似乎无法让它工作。

我将包括我认为理解我的问题所必需的代码:

来 self 的头文件。

typedef struct semaphoreStruct
{
int smValue;
tcbExtS *smHolder;
int smCeiling;
}semaS;

typedef void * SemaphoreHandle;

在我的 C 文件中

unsigned int semaphoreCreateBinary(void *ro_Handle,unsigned int i_InitialValue)
{
semaS *Semaphorehandle1;

Semaphorehandle = malloc (sizeof(*Semaphorehandle));

Semaphorehandle1->smValue = i_InitialValue;
ro_Handle = Semaphorehandle1; //seems to get the correct value

return resultUnInt;
}

int main(void)
{
SemaphoreHandle s1vPtr;

semaphoreCreateBinary(&s1vPtr,0);

int IV = s1vPtr->smValue//s1vPtr is empty again here
}

关于如何纠正这个问题有什么建议吗?

编辑:即使我将参数作为地址传递: 信号量CreateBinary(&s1vPtr,0);这是行不通的。我无法更改输入类型,因为我们是从老师那里作为 API 规范获得的,否则我会更改它。

最佳答案

在 C 中,参数按值传递给函数。因此,您只更改函数内部的值。此外,还有一个错误:您没有分配Semaphorehandle1。所以,会有段错误。这是正确的:

unsigned int semaphoreCreateBinary(void **ro_Handle,unsigned int i_InitialValue)
{
semaS *Semaphorehandle1 = malloc(sizeof(semaS));
Semaphorehandle1->smValue = i_InitialValue;
*ro_Handle = Semaphorehandle; //seems to get the correct value
return resultUnInt;
}

不要忘记在使用后释放内存。

关于c - 指向结构指针的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298642/

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