【发布时间】:2013-11-28 18:55:54
【问题描述】:
我有一个指向多个结构的指针,这些结构通过以下方式分配了内存:
STRUCTNAME *ptr;
ptr = (STRUCTNAME *)malloc(sizeof(STRUCTNAME)*numberOfStructs);
结构是通过这样的偏移量访问的:
(ptr + i)->field;
这些结构有 2 个字段是字符指针,如下所示:
typedef struct
{
char *first;
char *second;
}STUCTNAME;
这些字段分配的内存如下:
(ptr + i)->first = (char *)malloc(strlen(buffer));
这似乎可行,但是当我尝试释放结构中的指针时,我执行此操作时出现分段错误 11:
free((prt + i)->first);
帮助?
注意事项: 缓冲区是一个字符数组。将指针偏移一个整数应该将指针增加它所指向的大小乘以整数正确吗?
这是我的完整源代码的链接。我还没有编写一些函数,也没有使用 freeAllpointers 和 printAll。 https://drive.google.com/file/d/0B6UPDg-HHAHfdjhUSU95aEVBb0U/edit?usp=sharing
哦!感谢大家!祝你感恩节快乐! =D(如果你喜欢那种东西)
【问题讨论】:
-
但无论如何,您不应该释放指向数组各个成员的指针。指针只有在
malloc()ated(或calloc()ated 或realloc()ated)时才为free()d,它只是指向第一个元素的指针。跨度> -
ptr[i].first怎么样?看起来好多了。 -
在释放 char 指针之前是否释放了结构指针? ;)
-
(char *)malloc(strlen(buffer));是可疑的。之后你复制了buffer和strcpy吗?如果你是的话,你就是在浪费内存——因为没有空间给 nul 终止符。使用malloc(strlen(buffer)+1)
标签: c