C - 将 free 用于动态数组结构的问题



我无法理解为什么它在用 C 语言处理以下代码时会给我一个 Seg 错误:

下面是类型和声明:

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("checkn");
T = T-> next;
free(T->left);
free(T->right);
free(T);
return 0;
}

删除行时

T = T-> next;

一切顺利。

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

相关内容

  • 没有找到相关文章

最新更新