在 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 太小了,这意味着你的代码正在访问超出合法分配的内存。
您只是“幸运”(或不幸,取决于您是否喜欢隐藏错误),这种未定义的行为只会在不同的环境中导致不同的输出。
下面的程序是 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 太小了,这意味着你的代码正在访问超出合法分配的内存。
您只是“幸运”(或不幸,取决于您是否喜欢隐藏错误),这种未定义的行为只会在不同的环境中导致不同的输出。