我正在使用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()释放它。
答案 0 :(得分:2)
你应该像这样呼叫g_strsplit
gchar **data = g_strsplit (result, ",", 6);
原因是因为g_strsplit
期望delimiter
的NULL终止字符串,&delimiter
给出单个字符的内存地址,之后没有NULL字符,所以它写入一些内存< / p>
答案 1 :(得分:1)
我弄清楚问题是什么。我得到了那个错误,因为我的缓冲区大小太小而无法保存数据。我增加了它,错误就消失了。