【发布时间】:2018-08-29 15:06:33
【问题描述】:
我无法理解为什么在用 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 并且我在第一个(第二个免费)时遇到了 Seg-Fault
似乎在任何地方都找不到答案:S
【问题讨论】:
-
问题可能出在您“在程序中使用它们”的部分,而您没有向我们展示。所以请尝试创建一个Minimal, Complete, and Verifiable Example 向我们展示。
-
你能证明所有三个指针在释放时都是非空的并且没有改变,例如to left=left+1... 最重要的是还没有被释放?
-
请不要讲故事,而是提供 MCVE 和How to Ask 指定的所有信息。
-
sizeof(char)总是等于 1,所以你可以跳过它。您不检查 malloc 是否失败(但这不是问题, free(NULL) 可以这样做)。因此,您向我们展示的代码应该“工作”。您的错误位于您没有向我们展示的代码上。请提供一个 MVCE。 -
@Tom's:
T->…将调用 UB。但是 OP 似乎对提供所有必需的信息和 MCVE 不感兴趣,所以我们应该顺其自然。
标签: c pointers segmentation-fault malloc free