私はglib2.0APIを利用しています。CSVファイルを読み取り、g_strsplit関数を使用してコンマの間のデータを取得しています。以下は私のコードです:
gchar* record = get_record_from_file();
printf("Record: %s\n", record); <--- WORKS CORRECTLY
gchar** data = g_strsplit(record, ",", 6); <-- ERROR HERE
free(record);
splitメソッドを使用すると、エラーが発生します。これが私の出力です。
記録:2,0.4,2,0,1,10、
*glibcが検出されました* /path / to / my / project:free():無効な次のサイズ(通常):0x0000000001c06a00 ***
エラーをグーグルで検索してみました。どうやら、この質問と回答から、エラーはメモリに関係しています:
これは、メモリエラーがあることを意味します。mallocによって割り当てられていないポインターを解放しようとしている(またはnewによって作成されていないオブジェクトを削除しようとしている)か、そのようなオブジェクトを複数回解放/削除しようとしている可能性があります。バッファがオーバーフローしたか、書き込みを行うべきではないメモリに書き込みを行っている可能性があり、ヒープが破損している可能性があります。
g_strsplitは正しく呼び出されていますか?なぜこのエラーが発生するのですか?
Doc:
文字列:分割する文字列。
区切り文字:文字列を分割する場所を指定する文字列。max_tokensに達しない限り、区切り文字は結果の文字列のいずれにも含まれません。
max_tokens:文字列を分割する最大ピース数。これが1未満の場合、文字列は完全に分割されます。
戻り値:新しく割り当てられたNULLで終了する文字列の配列。g_strfreev()を使用して解放します。