在 windows 中的 vim 编辑器中 运行 时程序输出发生变化

Program output changes when ran in vim editor in windows

下面的程序是 return C 语言。我不知道为什么当程序相同但编辑器不同时输出会发生变化。

#include<stdio.h>
#include<stdlib.h>
struct Queue{
    int tail,head,capacity,size;
    int* array;
};

struct Queue* create_queue(int capacity){
    struct Queue *queue = (struct Queue*)malloc(sizeof(struct Queue*));
    queue->capacity = capacity;
    queue->head = 0;
    queue->tail = 0;
    queue->size = 0;
    queue->array = (int*)malloc(capacity * sizeof(int));
    return queue;
}

int isFull(struct Queue* q){
    return q->size == q->capacity;
}

int isEmpty(struct Queue* q){
    return q->size == 0;
}

void enqueue(struct Queue* q,int data){
    if (isFull(q)){
        return;
    }
    else{
        q->array[q->tail++] = data;
        q->size = q->size + 1;
    }
}

int dequeue(struct Queue* q){
    if (isEmpty(q) || (q->tail == q->head) || q->tail < q->head){
        return -1;
    }
    else{
        return q->array[q->head++];
    }
}

int main(){
    struct Queue *qptr = create_queue(100);
    printf("Queue of capacity %d is created.\n",qptr->capacity);\
    enqueue(qptr,20);
    enqueue(qptr,30);
    enqueue(qptr,40);
    printf("The dequeued element is: %d\n",dequeue(qptr));
    return 0;
}

下面是在Vim中构建和运行一个C文件的按键映射,供大家参考。有没有需要改变这个映射,我想知道是否有。

autocmd filetype c nnoremap <F2> :w <CR> :!gcc % -o %:r -Wl,--stack,268435456<CR>
autocmd filetype c nnoremap <F3> :!%:r<CR>

Vim 输出:

Queue of capacity -499734755 is created.
shell returned -1073741819

代码块输出:

Queue of capacity 100 is created.
The dequeued element is: 20

我该如何解决这个问题?

(struct Queue*)malloc(sizeof(struct Queue*)); 有腥味。我怀疑第二个 *.

成语是struct Queue *queue = malloc(sizeof(*queue));
IE。没有转换,也没有数据类型的重复。你的 malloc 太小了,这意味着你的代码正在访问超出合法分配的内存。
您只是“幸运”(或不幸,取决于您是否喜欢隐藏错误),这种未定义的行为只会在不同的环境中导致不同的输出。