首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:‘中止陷阱:未分配6-指针被释放’与类where子句

Swift:‘中止陷阱:未分配6-指针被释放’与类where子句
EN

Stack Overflow用户
提问于 2015-12-02 06:28:01
回答 1查看 184关注 0票数 0

请考虑以下几点:

代码语言:javascript
复制
protocol DataContainer {
  typealias Data
}

protocol Foo {
  typealias FooBar: DataContainer
  typealias FooBaz: DataContainer
  typealias Schema
}

final class FooClass<F: Foo where F.Schema == F.FooBar.Data, F.Schema == F.FooBaz.Data> {}

这个表达式相当丰富的where子句不使用神秘的错误消息进行编译:

命令失败,因为信号:中止陷阱6 ..。 swift(4946,0x7fff777c9300) malloc:*对象0x7fff5a5fbfe0:指针未分配

对我来说这是完全没有意义的。我已经确认,当我删除where子句约束时,错误会消失,如下所示:

代码语言:javascript
复制
final class FooClass<F: Foo> {}

我知道在黑暗中这是一个很长的机会,但有人经历过吗?

如果是的话,你找到什么解决办法了吗?

增编:如果迅速地允许在 protocol本身中表示相等约束,而不是将约束泄漏到它的实现者中,这是完全可以避免的。请参阅this question

EN

回答 1

Stack Overflow用户

发布于 2015-12-02 07:12:11

好吧。因此,经过几次强力调试之后,我发现如果我对受约束的参数使用相同的type名称,它就会编译。

例如,

代码语言:javascript
复制
protocol Foo {
  typealias FooBar
  typealias FooBaz
  typealias Data
}
final class FooClass<F: Foo where F.Data == F.FooBar.Data, F.Data == F.FooBaz.Data> {}

这个编译。请注意,我所做的只是将Schema更改为Data。这绝对是个窃听器。

-EDIT:并相应地报告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34036240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档