Tại sao cùng 1 chương trình mà dev c++ và onlinegdb lại ra kết quả khác nhau?

Dưới đây là 1 chương trình thay đổi giá trị trong node em làm trên codelearn, khi chạy trên codelearn và onlinegdb.com thì ra đúng kết quả còn chạy trên dev c++ thì lại không

#include<stdio.h>
#include<stdlib.h>
int i;
typedef struct node{
  int X;
  struct node* next;
} Node;
 Node* makenode(int x){
     Node* p=(Node*) malloc(sizeof(Node));
     if(p==NULL){
     	printf("error");
     	exit(0);
	 }
     p->X=x;
     p->next=NULL;
     return p;
 }
 Node* add(Node* h, int x){
     Node* p= makenode(x);
     h->next=p;
     return p;
 }
 Node* thaydoi(Node* h,int a,int b){
     Node* p=h;
     while(p!=NULL){
         if(p->X==a){
		  p->X=b; 
	}
         p=p->next; 
 }
     return h;
 }
 void solution(Node* h){
     Node* p=h;
     while(p!=NULL){
         printf("%d ",p->X);
         p=p->next;
     }
 }
int main(){
  int n,x;
  scanf("%d%d",&n ,&x);
  Node* h=makenode(x);
  Node* p=h;
  for( i=1;i<n;i++){
      scanf("%d",&x);
      p=add(p,x);
  }
  int a,b;
  scanf("%d %d",&a, &b);
  h=thaydoi(h,a,b);
  solution(h);
    return 0;
}

đây là kết quả trên codelearn và online gdb
image
Còn đây là kết quả khi chạy trên dev c++ :

5
1 2 3 4 5
2 6
3

Mọi người giải thích hộ em với ạ

Hành vi bất định (Undefined behavior) xảy ra khi biên dịch cùng một đoạn mã trên các trình biên dịch khác nhau.
Đoạn mã trên là C thuần, có khả năng bạn biên dịch sang C++ trên DevC++ không?

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?