C 释放指针引用的结构中的指针
我有一个指向通过以下方式分配内存的几个结构的指针:C 释放指针引用的结构中的指针,c,C,我有一个指向通过以下方式分配内存的几个结构的指针: STRUCTNAME *ptr; ptr = (STRUCTNAME *)malloc(sizeof(STRUCTNAME)*numberOfStructs); 通过偏移量访问结构,如下所示: (ptr + i)->field; 结构有两个字段,它们是字符指针,如下所示: typedef struct { char *first; char *second; }STUCTNAME; (ptr + i)->fir
STRUCTNAME *ptr;
ptr = (STRUCTNAME *)malloc(sizeof(STRUCTNAME)*numberOfStructs);
通过偏移量访问结构,如下所示:
(ptr + i)->field;
结构有两个字段,它们是字符指针,如下所示:
typedef struct
{
char *first;
char *second;
}STUCTNAME;
(ptr + i)->first = (char *)malloc(strlen(buffer));
这些字段按如下方式分配内存:
typedef struct
{
char *first;
char *second;
}STUCTNAME;
(ptr + i)->first = (char *)malloc(strlen(buffer));
这似乎是可行的,但当我尝试释放结构中的指针时,我会在执行此操作时出现分段错误11:
free((prt + i)->first);
帮忙
注:
缓冲区是一个字符数组。将指针偏移一个整数应该使指针的大小增加它所指向的值乘以整数,对吗
这里是我完整源代码的链接。我还没有编写一些函数,也没有使用freeAllpointers和printAll。
哦!!谢谢大家!祝你感恩节快乐=D(如果你喜欢这种东西)- 如果您没有初始化该代码段中的所有成员,那么您没有向我们显示:
用分配
存储(struct
),以便所有分配的内存,即STRUCTNAME*
和first
在开始时为零。将second
传递到将导致不操作。将任何野生(垃圾)指针传递到NULL
可能会导致分段错误free()
- 要检测双自由度,请设置
ptr[i]。first=NULL代码>后
自由(ptr[i].第一)代码>作为测试的防御措施
void*
,它们没有将sizeof(void)
定义为具有未定义行为的值>0:
编辑:
void makeReviews(FILE*input,REVIEW*rPtr,int-numReviews)
首先,但无论如何,您不应该释放指向数组单个成员的指针。当指针被malloc()
ated(或calloc()
ated或realloc()
ated)时,它只能是free()
d,这只是指向第一个元素的指针。那么ptr[i]呢。第一个如何?看起来好多了。在释放char指针之前是否释放了结构指针?;)<代码>(字符*)malloc(strlen(缓冲区))代码>可疑。之后您是否使用strcpy复制了buffer
?如果你是的话,你就是在糟蹋记忆——因为没有空间放nul终结者。使用malloc(strlen(buffer)+1)
我相信fgets可以很好地工作,因为当我打印makeReviews中字段的值时,输出与预期一样。我将尝试使用makeReviews的返回类型来执行您所说的操作。再次感谢。@Mac:不客气。我建议将fscanf()
作为一种可能的快捷方式,而不是修复方法。哇,显然我不理解通过引用传递指针?这就成功了。非常感谢,伙计,不客气。在C中不能通过引用进行传递。您可以做的是将指针传递给指针(请参见编辑)。哦,是的,我明白您使用fscanf()
的意思。我误解了。