2016-04-23 16 views
-3

私はchar *配列を使用して、複数のマッピングスレッドから還元スレッドに情報を移動するバッファを作成しています。配列を円形にする必要がありますが、配列が部屋を使い果たすとセグメント化エラーが発生します。アレイを円形にするにはどうしたらいいですか?私は現在、すべてのヘルプが理解される1024であるマクロで循環型文字配列バッファ -

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); 

を有します。

tempが

char *temp = malloc(sizeof(char *)); 

であり、それは

memcpy(temp, kv, i); 

から値を取得し、KVは主から関数に渡されます。

+3

情報が不十分です。一時は何ですか?私は何ですか? – Pemdas

+0

tempはchar *のcharポインタサイズで、iはバッファにコピーされるデータのサイズ(バイト単位)です。 –

+3

tempは何ですか?コードを表示します。 – Pemdas

答えて

0

これは間違っている:

char *temp = malloc(sizeof(char *)); 

あなたはmemcpy()を使用してそこにいくつかのデータを保存しているが、ストレージスペースが4または8バイトであるだけsizeof(char*)です。他のサイズを使用することをお勧めします。 iの値はmemcpy()に渡されます。 tempcharの配列を指すように期待されているので

0
char *temp = malloc(sizeof (char *)); 

char *temp = malloc(sizeof (char) * i); // sizeof (char) can be omitted 

であるべきです。


mr->buffer[next] = temp[j]; 

mr->buffer[next]タイプchar *であるため

mr->buffer[next] = &temp[j]; 

であるべきです。

関連する問題