我正在使用glib 2.0 API。我正在读取CSV文件,并使用g_strsplit函数在逗号之间获取数据。以下是我的代码: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的检测* /路径/到/我/项目:免费():无效的下一个大小(正常): 0x0000000001c06a00 ***
我试着用google搜索错误。显然,从this问题和答案,错误与内存有关:
这意味着你有一个内存错误。您可能试图释放未被malloc分配的指针(或删除 不是由新创建的对象),或者您可能试图不止一次释放/删除这样的一个对象 。您可能会溢出缓冲区或以其他方式写入您不应写入的内存,导致堆 损坏。
被调用的g_strsplit是否正确?为什么我得到这个错误?
Doc:
字符串:一个字符串分割。
分隔符:一个字符串,它指定分割 字符串的位置。除非达到max_tokens,否则分隔符不包含在任何结果字符串中, 。
max_tokens:将字符串拆分为的最大数量。如果这个 小于1,则字符串被完全分割。
返回:新分配的以NULL结尾的字符串数组。使用 g_strfreev()释放它。
很高兴听到。您发布的代码中没有任何其他显而易见的内容。使用像valgrind这样的工具可以帮助在将来发现像这样的内存问题 – iain 2013-03-17 13:50:40
感谢@iain为您提供的所有帮助。欣赏它:) – Goaler444 2013-03-17 13:51:54