c - 初始化迭代器指针 : Segmentation Fault

标签 c pointers gcc memory

我试图用 C 语言制作队列(作为一个类(class)项目)。他们提供的演示代码适用于 Borland Turbo C。我正在尝试通过 gcc 重建程序。虽然代码在 Turbo C 中完美运行,但它在运行时在 gcc 中抛出错误作为 Segmentation Fault (core dumped)

我没有包含不必要的代码部分。逐行尝试和测试它。

struct node {
    int data;
    struct node *link;
};

struct queue {
    struct node *front;
    struct node *rear;
};

void initQ(struct queue *q) {
    q->front = q->rear = NULL;  //      Error : Segmentation Fault! (core dumped)
}


void main() {
    struct queue *Q;
    initQ(Q);
}

我确定问题与编译器中的 C 版本有关。由于 Turbo C 相当古老,它不支持最新的修复。我在代码的其他各个部分遇到类似的 Segmentation Fault 错误,例如:

void displayQ(struct queue *q) {
        struct node *temp;
        temp->link = q->front;  //      Error : Segmentation Fault! (core dumped)
 }

问题 1:为什么 gcc 会报这样的运行时错误? (在此代码中)

问题 2:为什么代码在 Turbo C 中运行良好,但在 gcc 中运行不正常?

问题 3:是否有替代这种编程风格的方法?

最佳答案

您需要预留空间(使用malloc):

struct queue *Q = malloc(sizeof(*Q));
initQ(Q);

或者更好的calloc:

struct queue *Q = calloc(1, sizeof(*Q));
/* initQ(Q); you don't need this, calloc set all members to NULL */

不要忘记在最后调用 free(Q);

关于c - 初始化迭代器指针 : Segmentation Fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553636/

相关文章:

linux - GCC 4.8.0 构建大小在 OS X 和 Ubuntu 上差异很大

c++ - 与 MSVC 的链接错误,但与带有 constexpr 的 g++ 的链接错误

c - fgets 与 sscanf 结合

python - 无法导入用 C 编写的 Python 模块

逐个字符比较两个文件 - C 中的文件结尾错误

c - 理解指向指针概念的指针

C编程: Create and write 2D array of files as function

c - 在 c 中读入一个 int 并忽略其他任何内容

c - 数据类型* <变量名> 和。数据类型 *<变量名>

mysql - 未定义对 `mysql_get_client_info' 的引用