我正在使用 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(): invalid next size (normal): 0x0000000001c06a00 ***
我试着用谷歌搜索错误。显然,从这个问题和答案来看,错误与记忆有关:
这意味着你有一个内存错误。您可能试图释放不是由 malloc 分配的指针(或删除不是由 new 创建的对象),或者您可能试图多次释放/删除这样的对象。您可能正在溢出缓冲区或以其他方式写入不应写入的内存,从而导致堆损坏。
是否正确调用了 g_strsplit?为什么我会收到此错误?
文件:
string:要拆分的字符串。
delimiter :一个字符串,它指定分割字符串的位置。分隔符不包含在任何结果字符串中,除非达到 max_tokens。
max_tokens :将字符串拆分成的最大片段数。如果小于 1,则字符串被完全拆分。
返回:一个新分配的以 NULL 结尾的字符串数组。使用 g_strfreev() 释放它。