As per the spec, clSetKernelArgSVMPointer API expects a svm pointer as the argument value for argument specified by arg_index. So, you can not pass "&n" in this way as it is not a svm pointer.
When I change the "global int *n" to "global int n", it show me error: parameter may not be qualified with an address space.
If you want to pass the value of "n" , declare the corresponding kernel argument as "int n" [no "global" qualifier is required, as it is not a pointer] and use clSetKernelArg instead of clSetKernelArgSVMPointer.
__kernel void image1dCopy(global uchar4* svmbuffer,global uchar4* svmoutbuffer, int n)
status = clSetKernelArg( kernel2D, 2, sizeof(cl_int), &n);