![]() |
1
2
它不工作的原因是C中的函数参数被复制。因此,在外部上下文中,check=null,将其传递到callintallocation函数中,并生成一个副本。Callintallocation定义它是 地方的 要返回malloc调用的check副本。但是外部副本没有更新——它仍然指向空值。 最简单的解决方案是返回新的指针值并按照几个人的建议分配它。 当您有需要修改数据结构的函数时,您需要传递一个指向它们的指针,而不是它们的副本,这样函数就可以修改指针指向的内容。同样的原则也适用于这里,尽管您想要修改的数据结构本身就是一个指针。 所以另一个解决方案是callintallocation采用一个指针对指针,它允许您修改指针指向的位置,并取消对它的引用:
调用
显然,在这种情况下,返回新的指针值是明智的方法。 最后一点:如果您有它可用,可以使用“memset”(c90而不是c89 afaik,不过是单个UNIX规范的一部分)代替“for”循环。
(这是针对函数的版本,而不是采用int**参数的版本) |
![]() |
2
5
使用回报?
编辑 呼叫方负责呼叫free()。 |
![]() |
3
4
您有两种可能的解决方案:
或者,如果要分配数组,则应将指针传递给int*:
|
![]() |
4
3
要直接回答您的问题:
但我建议这样做:
|
![]() |
5
0
您可以将指针“返回”到分配的内存。如果返回空值,则表示分配失败。 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 8 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 8 月前 |
![]() |
tTt · 使用堆栈中的值重新分配指针 9 月前 |
![]() |
manuel · 现代C中空指针的替代方案++ 9 月前 |
![]() |
cha · 为什么在C中,int变量需要“&”运算符,而数组不需要?[副本] 10 月前 |