проблемы использования свободных для структуры динамических массивов - PullRequest
0 голосов
/ 29 августа 2018

Я не могу понять, почему он вызывает ошибку Seg-Fault при обработке следующего кода в 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);

ааааа, и я получаю Seg-Fault на первом (и втором свободном)

Кажется, нигде не могу найти ответ: S

1 Ответ

0 голосов
/ 29 августа 2018

Как упомянул @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 в своем коде.

...