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()
的意思。我误解了。