7605


Swiftを使用してアプリを作成しています。  
METALを利用してGPGPUを試みているのですが、GPUから値を得た後に、  
下記のエラーが表示され、プログラムが止まります。

[code]

    malloc: *** error for object 0x102ca4000: pointer being freed was not allocated
    *** set a breakpoint in malloc_error_break to debug
    
[/code]

自分なりには調べているつもりなのですが、何が原因が特定できません。  
メッセージの通り、malloc_error_breakをセットしてみたのですが、  
止まるところはほぼ変わらず、その解析の仕方も分かりません。

せめて、object 0x102ca4000が何を示しているのかが、  
分かれば少しは要因を解析できそうだと思うのですが、それを調べる方法も分かりません。

問題解決に向けて、助言をいただければと思います。よろしくお願いいたします。

コード全部を載せるのもどうかと思い、このような形で質問していますが、  
コードを記載すべきであれば、そのようにご指導いただければと思います。  
（現在の自分では、原因のありそうなところだけピックアップすることが  
難しそうなので、全部載せるようなことになりそうです。そのようにして  
よいかどうか、のご意見でもいただければ幸いです。）

追記１；  
コードを載せたが方がよいとのコメントをいただきましたので、[Gist](https://gist.github.com/AppleDeveloper37/6c5d7ca7aa2223b5f57b)に載せました。  
よろしくお願いいたします。

追記２；  
残念ながら、まだ問題は解決されていませんが、今の所の状況を追記しておきます。

[code]

     var outptr = outputVectors.withUnsafeMutableBufferPointer({
     ptr -> UnsafeMutablePointer<FloatVector> in
     return ptr.baseAddress
     })
    
     var resultData = NSData(bytesNoCopy: outputBuffer.contents(), length: vectorsByteLength)
     resultData.getBytes(outptr, length: vectorsByteLength)
    
[/code]

への変更では、エラー表示に変更はありませんでした。

偶然見つけられたのですが、上記object 0x102ca4000が指し示しているものが判明しました。  
resultData: NSDataインスタンスのようです。  
まだ調査中ですが、コメントいただいているごとく、C(C++)とのやりとりのところに問題が  
あるのかも知れません。

ここで述べるべきではないのかも知れませんが、当方、昨年６月からObjecive-Cを  
プログラム言語として、まともに勉強し始めたという状況もあり、METALのshading言語がObjective-
Cと異なるC++系とのことで、そこを触るだけでも、かなり四苦八苦しております。  
引き続き、ご助言をいただければと思います。


CC BY-SA 3.0
2015-03-08T02:01:25.990
7593
2015-03-08T07:20:04.597
2015-03-08T06:56:37.803
6006
6006
question
swift xcode6
Swiftでpointer being freed was not allocatedを解決する手段は？


問題が解決しましたので、自己回答します。  
追記２で問題の対象として判明したresultDataについて、

[code]

    var resultData = NSData(bytesNoCopy: outputBuffer.contents(),
    length: vectorsByteLength)
    
[/code]

を

[code]

    var resultData = NSData(bytesNoCopy: outputBuffer.contents(),
    length: vectorsByteLength, freeWhenDone: false)
    
[/code]

に変更することでエラーが発生しなくなり、問題が解決しました。  
問題の箇所が特定できたことにより、解決策に結びつきました。  
回答が分かると、エラーの記載も分かるのですが・・・。


CC BY-SA 3.0
2015-03-08T07:20:04.597
7605
2015-03-08T07:20:04.597
6006
7593
answer