g_strsplit给我一个错误(free():下一个大小无效)

时间:2013-03-17 12:25:11

标签: c glib

我正在使用glib 2.0 API。我正在读取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 ***

我试过谷歌搜索错误。显然,从this问题和答案来看,错误与记忆有关:

  

这意味着您有内存错误。你可能想要释放一个   未被malloc分配的指针(或删除一个对象   不是由new创建的)或者你可能试图释放/删除这样的   对象不止一次。您可能正在溢出缓冲区或其他情况   写入你不应该写的内存,导致堆   损坏。

是否正确调用了g_strsplit?为什么我会收到此错误?

Doc

  

string:要拆分的字符串。

     

delimiter:一个字符串,指定要拆分的位置   串。分隔符不包含在任何结果字符串中,   除非达到max_tokens。

     

max_tokens:将字符串拆分为的最大件数。如果这   小于1,字符串完全分开。

     

返回:新分配的以NULL结尾的字符串数组。使用   g_strfreev()释放它。

2 个答案:

答案 0 :(得分:2)

你应该像这样呼叫g_strsplit

gchar **data = g_strsplit (result, ",", 6);

原因是因为g_strsplit期望delimiter的NULL终止字符串,&delimiter给出单个字符的内存地址,之后没有NULL字符,所以它写入一些内存< / p>

答案 1 :(得分:1)

我弄清楚问题是什么。我得到了那个错误,因为我的缓冲区大小太小而无法保存数据。我增加了它,错误就消失了。