c - 使用 free 作为动态数组结构的问题

标签 c pointers segmentation-fault malloc free

我无法理解为什么在 C 中处理以下代码时它会给我一个 Seg-Fault:

这是类型和声明:

typedef struct Tcell { char* left;
             char* right;
            struct Tcell* next;} Tcell;


Tcell* T;

T=malloc(sizeof(Tcell));
T->right=malloc(sizeof(string2) + sizeof(char)*10); //string2 is a dynamic string of chars.
T->left=malloc(sizeof(char)*11);
strcpy(L->right, string2); 
L->left="_";
free(T->left);
free(T->right);
free(T);

aaaa,我第一次遇到段错误(第二次免费)

似乎无法在任何地方找到答案:S

最佳答案

正如 @Yunnosch 在评论部分提到的,在释放动态内存之前,您可能已经修改了指针。

例如下面的代码给出了段错误

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct Tcell {
    char* left;
    char* right;
    struct Tcell* next;
} Tcell;


int main(){
    Tcell *T;
    T=malloc(sizeof(Tcell));
    assert(T != NULL);
    T->right=malloc(sizeof(char)*10);
    assert(T->right != NULL);
    T->left=malloc(sizeof(char)*11);
    assert(T->left != NULL);

    printf("check\n");
    T = T-> next;

    free(T->left);
    free(T->right);
    free(T);
    return 0;
}

当你删除线

T = T-> next;

一切顺利。

因此,您可能已经修改了代码中的 T。

关于c - 使用 free 作为动态数组结构的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52080766/

相关文章:

c - 接受二维数组中的多个字符串?

c - 为什么第二个代码出现段错误?

C、socket编程: Connecting multiple clients to server using select()

c++ - STL列表题C

c++ - 指向引用的指针和指向指针的引用之间的区别

c++ - 如何将对象指针存储在数组中

R glmnet : segmentation fault when using multinomial and pmax

c - malloc 之后出现段错误 char**

更改数据包流中的特定字节

c - 正则表达式 - 获取字符串的每个部分(除了中间部分)