是这个地方出的错误:
membres[i] = strtok(chaine, "|");
这里members[i]是一个字符指针,在这句话之后,它指向了chaine中的一段,而不再指向之前malloc申请的内存空间了。
所以后来free的是chaine的内存空间,而不是之前malloc的。
所以这里应该用字符串的拷贝:
strcpy(members[i], strok(chaine, "|");
molloc()函数只能返回分配空间的首地址,就算你用 char** 进行强制类型转换实质上也没有改变成地址的地址,所以第一次内存分配就失败了
你可以将membres作为一个指针数组,分别为每个数组元素分配空间