循环字符数组缓冲区-c
我使用char*数组创建一个缓冲区,将信息从多个映射线程移动到一个缩减线程。我需要使阵列成为圆形,但是,当阵列空间不足时,我会不断出现分段错误。如何使数组成为圆形?我现在有循环字符数组缓冲区-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。感谢您的帮助
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];