我无法理解为什么在 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/