cannot write into array when index is calculated

I cannot write into array when index is calculated, seeds[k+1] = whatever. Strangely, I can write into the array when I have seeds[k]. However, I need this functionality. I don’t get what the difference is. Help very much appreciated.

void RNG_Init(int seed, int *seeds, int k) {
int j;
for (j=0; j<51; j++) {
seed = (69069 * seed + 1);
}
// for (j=0; j<2; j++) {
// seed = (69069 * seed + 1);
if (k<8) seeds[k+1] = k+7;
// }
}

__kernel void vector_add(__global int *seed, __global float *b, __global int *c) {

// Get the index of the current element
int seeds[25] = {1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int i = get_global_id(0);
RNG_Init(seed[i], seeds, i);

c[i] = seeds[i];

}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <CL/cl.h>

int main(void) {
// Create the two input vectors
int i;
const int lstsz = 10;
int seed = (int)malloc(sizeof(int)*lstsz);
float b = (float)malloc(sizeof(float)*lstsz);
srand(566998);
for(i=0; i<lstsz; i++) {
seed[i] = i;
b[i] = (rand()%10+1)/10.0;
}

// Load the kernel source code into the array source_str
FILE *fp;
char *cl;
size_t clsz;
fp = fopen("sim0.0.4.cl", "r");
if (!fp) { fprintf(stderr, "Failed to load kernel.\n"); exit(1); }
cl = (char*)malloc(0x100000);
clsz = fread(cl, 1, 0x100000, fp);
fclose(fp);

// Get platform and device information
cl_platform_id platform_id = NULL;
cl_device_id device_id = NULL;
cl_uint ret_num_devices;
cl_uint ret_num_platforms;
cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);
printf("ret_num_platforms (%d)\n", ret_num_platforms);
printf("platform_id (%d)\n", platform_id);
size_t leng;
char buff[2048];
ret = clGetPlatformInfo(platform_id, CL_PLATFORM_EXTENSIONS, sizeof(buff), buff, &leng);
printf("%s\n", buff);
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &device_id, &ret_num_devices);
printf("device_id (%i)\n", device_id);
ret = clGetDeviceInfo(device_id, CL_DEVICE_NAME, sizeof(buff), buff, &leng);
printf("%s\n", buff);

// Create an OpenCL context
cl_context context = clCreateContext(NULL, 1, &device_id, NULL, NULL, &ret);

// Create a command queue
cl_command_queue command_queue = clCreateCommandQueue(context, device_id, 0, &ret);

// Create memory buffers on the device for each vector 
cl_mem bfrseed = clCreateBuffer(context, CL_MEM_READ_ONLY, lstsz * sizeof(int), NULL, &ret);
cl_mem b_mem_obj = clCreateBuffer(context, CL_MEM_READ_ONLY, lstsz * sizeof(float), NULL, &ret);
cl_mem c_mem_obj = clCreateBuffer(context, CL_MEM_WRITE_ONLY, lstsz * sizeof(int), NULL, &ret);

// Copy the lists A and B to their respective memory buffers
ret = clEnqueueWriteBuffer(command_queue, bfrseed, CL_TRUE, 0, lstsz * sizeof(int), seed, 0, NULL, NULL);
ret = clEnqueueWriteBuffer(command_queue, b_mem_obj, CL_TRUE, 0, lstsz * sizeof(float), b, 0, NULL, NULL);

// Create a program from the kernel source
cl_program prg = clCreateProgramWithSource(context, 1, (const char **)&cl, (const size_t *)&clsz, &ret);
if (ret != CL_SUCCESS) { printf("Error: Failed to create a device groupa! (%d)\n", ret); return EXIT_FAILURE; }

// Build the program
ret = clBuildProgram(prg, 1, &device_id, NULL, NULL, NULL);
clGetProgramBuildInfo(prg, device_id, CL_PROGRAM_BUILD_LOG, sizeof(buff), buff, &leng);
printf("%s\n", buff);
if (ret != CL_SUCCESS) { printf("Error: Failed to create a device group! (%d)\n", ret); return EXIT_FAILURE; }

// Create the OpenCL kernel
cl_kernel kernel = clCreateKernel(prg, "vector_add", &ret);

// Set the arguments of the kernel
ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&bfrseed);
ret = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
ret = clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&c_mem_obj);

// Execute the OpenCL kernel on the list
size_t global_item_size = lstsz; // Process the entire lists
size_t local_item_size = 1; // Process one item at a time
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);

// Read the memory buffer C on the device to the local variable C
int *c = (int*)malloc(sizeof(int)*lstsz);
ret = clEnqueueReadBuffer(command_queue, c_mem_obj, CL_TRUE, 0, lstsz * sizeof(int), c, 0, NULL, NULL);

// Display the result to the screen
for(i = 0; i < lstsz; i++) printf("%d + %f = %d\n", seed[i], b[i], c[i]);

// Clean up
ret = clFlush(command_queue);
ret = clFinish(command_queue);
ret = clReleaseKernel(kernel);
ret = clReleaseProgram(prg);
ret = clReleaseMemObject(bfrseed);
ret = clReleaseMemObject(b_mem_obj);
ret = clReleaseMemObject(c_mem_obj);
ret = clReleaseCommandQueue(command_queue);
ret = clReleaseContext(context);
free(seed);
free(b);
free(c);
return 0;

}