I wrote a merge sort. When I changed the 35 lines of code to malloc(NULL), I found that the program could still sort the results without reporting an error. Why is this happening?
There is a warning at malloc(NULL) but no error.
int sort(int*a,int n){
    int *p=(int *)malloc(NULL);
    g_sort(a,0,n-1,p);
    return 1;
}
The code can be run to sort the correct result:
#include<bits/stdc++.h>
using namespace std;
void m_qsort(int *a,int left,int mid,int right,int*temp){
    int m=mid;int r=right;
    int k=0,j=mid+1;;
    int l=left;
    while(l<=m && j<=r){
        if(a[l]<=a[j])
            temp[k++]=a[l++];
        else
            temp[k++]=a[j++];
    }
    while(l<=mid){
        temp[k++]=a[l++];
    }
    while(j<=r){
        temp[k++]=a[j++];
    }
    for(int i=0;i<k;i++){
        a[left+i]=temp[i];
    }
    
}
void g_sort(int *a,int left,int right,int*temp){
    if(left<right){
        int mid=(left+right)>>1;
        g_sort(a,left,mid,temp);
        g_sort(a,mid+1,right,temp);
        m_qsort(a,left,mid,right,temp);
        
    }
}
int sort(int*a,int n){
    int *p=(int *)malloc(NULL);
    g_sort(a,0,n-1,p);
    return 1;
}
int main()
{  
    int a[22]={8,4,7,5,6,2,1,7,10,25,0,1,75,52,14,56,33,24,852,20,26,41};
    sort(a,22);
    for(int i=0;i<22;i++){
        cout<<a[i]<<' '<<endl;
    }
}
Result:
$g++ -o main *.cpp
main.cpp: In function ‘int sort(int*, int)’:
main.cpp:46:27: warning: passing NULL to non-pointer argument 1 of ‘void* malloc(size_t)’ [-Wconversion-null]
  int *p=(int *)malloc(NULL);
                           ^
$main
0 
1 
1 
2 
4 
5 
6 
7 
7 
8 
10 
14 
20 
24 
25 
26 
33 
41 
52 
56 
75 
852 
 
     
    