使用免费的动态数组结构的问题

时间:2018-08-29 15:06:34

标签: c pointers segmentation-fault malloc free

我无法理解为什么在C中处理以下代码时会给我一个段错误:

这是类型和声明:

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

1 个答案:

答案 0 :(得分:0)

正如@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。