私はこのプログラムをC++で書いていますが、まだ完成していませんが、テストしていますが、このエラーが発生していますHyphen(36636,0x7fff7d65b300) malloc: *** error for object 0x10d31858e: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
と私はそれについて何をすべきか分かりません私のコードは最高ではないことは分かっていますが、どんな助けでも大歓迎です。ありがとうございました。ここでMallocポインタが解放されていません
答えて
が大きな問題である:
char *tempCharArray = returnArray;
free(returnArray);
return tempCharArray;
あなたはコピーtempCharArray
へのポインタ、空きメモリは、ポインタで指され、その後、ポインタを返します。ポインタを使用すると、割り当てられたメモリを指していないので、の未定義の動作が発生します。
は、このあります:
char* goHyphen(const char* input) {
...
string *finWords = new string[numWords];
...
return (char*)finWords;
}
これは本当に本当に間違っています。特に、あなたがそれを使用する方法を検討:他の権利が主要な問題、そして再び未定義の動作ある
char* actual = goHyphen(input);
bool equal = strcmp(expected, actual) == 0;
。
そして、あなたはまた、(あなたがここdelete[]
を使用する必要があります)未定義の動作につながる別の問題である
delete actual;
を行います。ところで
は、それはあなたの問題を引き起こし、この最後のdelete
は(あなた本当にデバッガを使用する方法を学ぶ必要がある)ことがあります:あなたはgoHyphen
関数に文字列リテラルへのポインタを渡すと、それはですgoHyphen
関数がこのポインタを返す可能性があります。次に、たとえ割り当てられていなくても(すなわち、文字列リテラルを指すとき)、このポインタをdelete
にしようとします。
あなたはポインタに多く頼っているようですが、それをやめてください。動的割り当ての代わりにstd::vector
を使用してください。また、/free
とnew[]
/delete[]
(場合によってはnew[]
とdelete
)を混ぜてください。そうしないでください。そうしないと、std::vector
を使用してもその必要はありません。
ここでは、大雑把に言えば、Cスタイルのキャストをする必要がある場合、それはあなたがするべきではないことの兆候です。
親指のもう一つのルール:あなたは、文字列の使用が必要な場合はstd::string
インスタンス(すなわち、オブジェクト)を、そしてあなたは、「動的配列」はstd::vector
オブジェクトを使用する必要がある場合。
最後に、可能な限りポインタから離れてください。現代のC++では、多型の外にポインタはほとんど必要ありません。
ありがとうございます。最初の部分では、これを削除するのを忘れてしまいました。残念ですが、私はエラーを取り除くために何かしようとしていました。メソッド 'goHyphen'の問題については、間違っていると言うときに何が問題なのか、私はC++のまったく新しいものです。これはクラスのプロジェクトとメインのコードです私たちの教授によって提供されるので、私はそれを本当に変えることはできません。 –
@PatrickHennisもしあなたが「C++の真新しい」なら、あなたは複雑なIMOに何らかのやり方をしています。やめる。ちょっと戻って、[良い初心者の本を見つけて](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)、もう一度やり直してください。 –
@PatrickHennisああ、あなたの教授に「実際の削除」を「実際の削除」に変更するよう教えてください。渡された引数を返すときに、文字列の重複を行う必要がある(つまり、 'new []'を使ってメモリを作成する)必要があります。 –
あなたのコード
char *tempCharArray = returnArray;
free(returnArray);
return tempCharArray;
はとにかくtempCharArrayを取るとstdに変換したいです::あなたが直接あなたの関数内のstd ::文字列の代わりに、char型の配列を使用することができます
std::string tempString(hyphenated);
の文字列
std:: string insertHyphenNorm(const char* word, int positionToInsertAt) {
次に、不要なメモリの割り当てと削除は不要です
- 1. Mallocポインタが解放されていませんでした - Ionic1 + cordova-plugin-wkwebview-engine
- 2. initWithBitmapDataを呼び出すとMallocポインタが解放されませんでした
- 3. エラー: "ポインタが解放されていませんでした。"
- 4. mallocポインタに等しいポインタを解放します。
- 5. "解放されたポインタが割り当てられていません"
- 6. 解放されたポインタは、reallocとmallocでコンストラクション関数に割り当てられませんでした。
- 7. "解放されたポインタは割り当てられませんでした。" malloc、reallocの
- 8. ダブルリンクリストでエラーが発生しました '解放されたポインタが割り当てられていません'
- 9. IOSコアアニメーションオブジェクトが解放されていません
- 10. icu RegexMatcherメモリが解放されていません
- 11. Jedis接続が解放されていません
- 12. フラグメントがメモリから解放されていません
- 13. メモリがMKMapView/ARCで解放されていません
- 14. NodeJS Mysql - 接続が解放されていません
- 15. iosビュー階層でメモリが解放されていません
- 16. Freeはva_argリストとして送信されたポインタを解放しません
- 17. Mallocと複数のポインタを解放する
- 18. C - 解放されているポインタが割り当てられていない
- 19. 二重ポインタは関数内でmallocされません
- 20. カカオ64ビットバイナリリークメモリ? (NSDataを解放するとメモリが解放されません)
- 21. コンストラクタが呼び出されず、 "解放中のポインタが割り当てられませんでした"エラー
- 22. stxxlキューを使用しているときに `ポインタが解放されませんでした '
- 23. Macでオーディオをキャプチャする際に、ポインタが解放されていませんでしたか?
- 24. mallocのポインタ自体がNULLにリセットされていますか?
- 25. UDDTIO読み取り:ポインタが割り当てられていない解放さ
- 26. SignalR/mallocエラー - 解放されたオブジェクトのチェックサムが正しくありませんか?
- 27. ID3DX11Effectポインタを解放できませんか?
- 28. 多くのスレッドがブロックされていて、古い世代のメモリが解放されていません
- 29. アプリケーションのシャットダウン前にWCFプロキシが解放されていないリソースが解放されていますか?
- 30. Mallocが正しく印刷されていませんか?
これはあまりにも多くのコードを掘り下げるためのものです。 [mcve]を投稿してください。 –
main関数も含めることができます。 – user3286661