我正在使用char *数组来创建缓冲区,以将信息从多个映射线程移动到缩减线程。我需要使数组循环,但是,当阵列用完房间时,我不断收到分段错误。如何使阵列圆形?我目前有
for(j = 0; j < i; j++){
int next = mr->nextIndex + j;
if(next > 1023){
next = 0;
}
mr->buffer[next] = temp[j];
}
数组设置为,
new_mr->buffer = malloc(sizeof(char *) * MR_BUFFER_SIZE);
宏为1024.感谢任何帮助。
temp是
char *temp = malloc(sizeof(char *));
并从
获取其价值memcpy(temp, kv, i);
和kv从main传递给函数。
答案 0 :(得分:0)
这是错误的:
char *temp = malloc(sizeof(char *));
您使用memcpy()
将一些数据存储到那里,但存储空间仅为sizeof(char*)
,即4或8个字节。您可能打算在那里使用其他尺寸,例如您传递给i
的{{1}}的值。
答案 1 :(得分:0)
char *temp = malloc(sizeof (char *));
应该是
char *temp = malloc(sizeof (char) * i); // sizeof (char) can be omitted
因为temp
应指向char
的数组。
mr->buffer[next] = temp[j];
应该是
mr->buffer[next] = &temp[j];
因为mr->buffer[next]
的类型为char *
。