Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环字符数组缓冲区-c_C_Arrays_Multithreading_Circular Buffer - Fatal编程技术网

循环字符数组缓冲区-c

循环字符数组缓冲区-c,c,arrays,multithreading,circular-buffer,C,Arrays,Multithreading,Circular Buffer,我使用char*数组创建一个缓冲区,将信息从多个映射线程移动到一个缩减线程。我需要使阵列成为圆形,但是,当阵列空间不足时,我会不断出现分段错误。如何使数组成为圆形?我现在有 for(j = 0; j < i; j++){ int next = mr->nextIndex + j; if(next > 1023){ next = 0; } mr->buffer[next] = temp[j]; } 宏为1024。感谢您的帮助

我使用char*数组创建一个缓冲区,将信息从多个映射线程移动到一个缩减线程。我需要使阵列成为圆形,但是,当阵列空间不足时,我会不断出现分段错误。如何使数组成为圆形?我现在有

for(j = 0; j < i; j++){
    int next = mr->nextIndex + j;
    if(next > 1023){
        next = 0;
    }
    mr->buffer[next] = temp[j];
}
宏为1024。感谢您的帮助

临时工

char *temp = malloc(sizeof(char *));
它的价值来自于

memcpy(temp, kv, i);
kv从主电源进入功能。

这是错误的:

char *temp = malloc(sizeof(char *));
您正在使用
memcpy()
将一些数据存储到其中,但存储空间仅为
sizeof(char*)
,即4或8个字节。您可能打算在此处使用其他大小,例如传递给
memcpy()
i
的值

应该是

char *temp = malloc(sizeof (char) * i); // sizeof (char) can be omitted
mr->buffer[next] = &temp[j];
因为
temp
应该指向
char
的数组


应该是

char *temp = malloc(sizeof (char) * i); // sizeof (char) can be omitted
mr->buffer[next] = &temp[j];

因为
mr->buffer[next]
的类型是
char*

信息不足。什么是temp,什么是i?temp是char*的字符指针大小,i是复制到bytestemp中缓冲区的数据的大小是什么?显示code.temp被分配到指针的大小,但被索引到,好像它是一个字符数组?这似乎有点可疑。
mr->buffer[next] = &temp[j];