2016-11-21 10 views
-1

私の下の私の関数(Visual Studio 2015で)に対して次のメッセージが表示される理由を理解できません。C - strtok_s - アクセス違反の読み取り場所

0xC0000005:アクセス違反の読み取り場所0x0000002C。

私はthis answerを読みましたが、それは私を助けません。

このコードは何について記述していますか?
「インデックス、値」の組のグループに分けられたintの文字列があります。インデックスはユニークです。各グループはセミコロンで区切られています。例:1,2; 3,5; 2,2; 3,4
インデックスに各値を持つintの配列を取得しようとしています。

これまでのコードでは、文字列を抽出してchar* bufferに入れました。
次に、「インデックス、値」のグループをセミコロンで区切って、char** arrayKeyValueに保存します(struct inputElementというメンバ)。もう1つの構造体は、配列内の「インデックス、値」グループの数を表すintです。私は関数 "separateStringBySemicolon"でこれを行います。

次に、 "index、value"の各グループを新しい配列に分けようとします。ここで各 "index"は "value"と一致します。私は私の構造体を関数 "separateKeyValue"に渡すことでこれを行います。私はstrtok_sを使用しますが、エラーが発生します。

以下の関数(token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);)の最初の呼び出しでエラーが発生します。 token2またはnext_token2にアクセスすることはできませんが、わかりません。もしそうなら、なぜですか?

double* separateKeyValue(struct inputElement* inputElement) 
{ 
    int count = inputElement->length; 
    char** arrayOfKeyValue = inputElement->data; 

    double* arrayDecimal = malloc(count * sizeof(double)); 
    char sepComma = ','; //wrong should be char sepComma[] = ","; 
    char* token2 = NULL; 
    char* next_token2; 

    printf("Value in arrayofkeyvalue: %s", arrayOfKeyValue[0]); 

    for (size_t j = 0; j < count; j++) 
    { 
     token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2); 
     unsigned int index; 
     sscanf_s(token2, "%d", &index); 

     double value; 
     sscanf_s(next_token2, "%d", &value); 

     arrayDecimal[index] = value; 

     printf("res[%d] = %d\n", index, arrayDecimal[index]); 
     printf("\n"); 
    } 

    return arrayDecimal; 
} 
+0

この質問には多くのコンテキストがありません。 'separateKeyValue'関数に正確にどのような入力が渡​​されますか? –

+2

'inputElement'とは何ですか? 'inputElement-> data'とは何ですか?彼らはどのように初期化されますか?どこからどのようにこの関数を呼び出しますか? [良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)、[最小限の完全で検証可能な例]を作成する方法を学んでください(http://stackoverflow.com/jp)。/help/mcve)。 –

+0

具体的には、問題は 'arrayofKeyValue [j]'の値の1つでほぼ確実です。これはほとんどあなたが私たちに示していないことです。 – Useless

答えて

1

あなたは、2番目のパラメータとしてstrtok_sに、char定数、sepCommaを指定されている場合、それexpects区切り文字の文字列。

(そうではありません)偶然、','のASCII値は0x2Cです。

関連する問題