【发布时间】:2016-12-18 11:48:21
【问题描述】:
我正在创建具有用户输入名称长度的动态数组,但是当我想 free() 分配的内存为 malloc() 时,它给了我一个“调试错误”
typedef struct
{
char *nombre;
float nota;
} tficha;
tficha leeFicha()
{
char nombreTam[100];
int tamNombre;
tficha ficha;
scanf("%s",nombreTam);
tamNombre=strlen(nombreTam);
ficha.nombre=(char *)malloc(tamNombre*sizeof(char));
strcpy(ficha.nombre,nombreTam);
free(ficha.nombre); // Here is giving me a Debug Error (HEAP CORRUPTION DETECTED: after Normal block (#166) at 0x0065C450. CRT detected that the application wrote to memory after end of heap buffer.)
return ficha;
}
我怎样才能不出错地释放ficha.nombre?
【问题讨论】:
-
C 中不需要投
malloc& 朋友,也不以任何方式推荐。 -
OT:为避免在扫描时溢出目标缓冲区,请执行
scanf("%Ns",nombreTam);,其中N是缓冲区-1的大小。所以在这里:scanf("%99s",nombreTam);
标签: c arrays dynamic malloc free