C 动态矩阵中指针的处理问题

C 动态矩阵中指针的处理问题,c,pointers,memory-management,C,Pointers,Memory Management,我正在与指针作斗争:(.我尝试创建一个函数,它的功能类似于argv返回的内容。我的意思是,我希望它将一个顺序划分为一些字符串,每个字符串由不同的指针指向,以便通过方括号引用它们。(即:顺序[0],顺序[1]) 我想对任意数量的单词执行此操作,因此我使用dinamic内存。为了划分顺序,我使用strtok,它工作正常。问题是如何处理指针: 结果**我使用realloc为指向每个单词的指针保留内存,因此,当存在令牌时,我执行以下操作: 我增加了结果的大小 我为指向令牌的指针保留内存 我在代币上签名

我正在与指针作斗争:(.我尝试创建一个函数,它的功能类似于argv返回的内容。我的意思是,我希望它将一个顺序划分为一些字符串,每个字符串由不同的指针指向,以便通过方括号引用它们。(即:顺序[0],顺序[1])

我想对任意数量的单词执行此操作,因此我使用dinamic内存。为了划分顺序,我使用strtok,它工作正常。问题是如何处理指针:

结果**我使用realloc为指向每个单词的指针保留内存,因此,当存在令牌时,我执行以下操作:

  • 我增加了结果的大小
  • 我为指向令牌的指针保留内存
  • 我在代币上签名
(用于停止降价的文本)

如果我使用valgrind运行它以查看内存中的故障,在空闲(resu[0])步骤中会发生以下情况:

liberando: 0
==8372== Invalid free() / delete / delete[]
==8372==    at 0x40257ED: free (vg_replace_malloc.c:366)
==8372==    by 0x80489FA: main (lectura_consola.c:92)
==8372==  Address 0xbee8e28b is on thread 1's stack
使用这段代码,程序可以正确地保存和打印单词,但在释放内存时,它会爆炸,并且在尝试释放结果时[0]会显示:指针无效


您能告诉我错误在哪里吗?我完全迷路了,任何帮助都是有用的

这里的问题是您试图释放未分配的内存。您的第一个循环中有以下代码:

resul[conta]= malloc(sizeof(char*)); //Reserve size for the pointer
resul[conta]=token; //Asign word to the pointer
第二条语句覆盖第一条语句的结果,因此当您调用
free(resu[conta])
时,您试图释放
标记(它是字符串中的指针),而不是您分配的指针

在任何情况下,您都不需要第一条语句。您的
realloc
调用为指针数组保留空间。对
malloc
的调用只是将
sizeof(char*)
字节分配到没有良好效果的位置(即浪费内存)。由于该值只是被覆盖,您最终会泄漏内存


只要删除对malloc的调用,你的代码就会正常工作。

据我记忆所及,strtok并不只是在令牌之间分配内存inserts\0,这意味着你可以释放只读代码内存-发送UDP 4500 50“是这样的

请下次格式化您的代码。说明在编辑页上。我刚刚要说的是。但是,还要注意,以这种方式使用realloc是不安全的,因为如果realloc失败,那么原始数组就会泄漏。
liberando: 0
==8372== Invalid free() / delete / delete[]
==8372==    at 0x40257ED: free (vg_replace_malloc.c:366)
==8372==    by 0x80489FA: main (lectura_consola.c:92)
==8372==  Address 0xbee8e28b is on thread 1's stack
resul[conta]= malloc(sizeof(char*)); //Reserve size for the pointer
resul[conta]=token; //Asign word to the pointer