配列は最後の要素で埋められています

モハメド・アリ・ベンマンスール

配列(char *)を埋めようとしています。

配列を埋めるときに、要素を表示するために印刷しますが、問題ありません。

しかし、その後、(main()関数内で)配列を離れて使用しようとすると、常に最後の要素で埋められます。

typedef struct Device {
char *adr_mac;
char *rssi;
} Device; 

Device * devices[6];
int array_length = 6;

void *changeRssi( void *tab)
{
int h = 0;
srand(time(NULL));

int rssi = 0;
char ch[2] = "";

while(1){
   sleep(10);
printf("\n\n  $$$ Changing RSSI of devices ...\n\n");
for (h = 0; h < array_length; h++)
{

    rssi = generate_rssi(10,99);
    sprintf(ch, "%d", rssi);
    devices[h] -> rssi = ch;
    printf("new rssi = %s\n\n", devices[h] -> rssi);
}  
}

}
Sourav Ghosh

ここで言及することが2つあります。

まず、rssi値は2char秒(範囲10〜99)かかるように見えますが、の場合sprintf()、サイズ2のバッファーを指定しているため、1つの要素が不足しています。つまり、オフです。配列の境界に関して1つずつ。

あたりとしてC11、章§7.21.6.6、sprintf()定義

[....]書き込まれた文字の最後にヌル文字が書き込まれます。[...]

ただし、あなたの場合、スペースがないため、配列境界のオーバーランが発生し、未定義の動作が発生します

解決策:サイズ3の配列が必要になります。

2番目:のようなステートメントの場合devices[h] -> rssi = ch;、の内容chはにコピーされずdevices[h] -> rssi、むしろをdevices[h] -> rssi指しchます。この場合、chローカル変数であるため、関数が戻るとスコープ外になるため、それ以降のアクセスdevices[h] -> rssiは無効なメモリアクセスになり、これもUBの原因になります。

解決策:malloc()やファミリなどのアロケータ関数を使用してメモリを割り当てdevices[h] -> rssi、の内容をコピーするch必要がありますstrdup()または、を使用します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

最初の挿入後、配列は不確定な値で埋められます

分類Dev

列のセルを最後に埋められた行まで埋める方法は?

分類Dev

Lodashを使用して配列内に埋め込まれた配列からすべてのIDを取得するにはどうすればよいですか?

分類Dev

欠落している配列要素をFlotのゼロ値で埋めます

分類Dev

これらのノイズパラメータで2d numpy配列を埋めるより速い方法?現在、各要素をループしています

分類Dev

Androidでfirestore配列から最後の要素を取得するにはどうすればよいですか?

分類Dev

Matlabのセル配列から最後の要素を削除するにはどうすればよいですか?

分類Dev

JSの配列は実際に空のスペースで埋められていますか、それとも印刷時にゼロで埋められていますか?

分類Dev

PHP in_arrayは、最後の配列要素のみを検索しています

分類Dev

内部のng-repeatは、配列の最初の項目をスキップし、それらを最後のhtml要素に配置しています

分類Dev

下のimgのように、行を最後まで均等に埋める要素を作成するにはどうすればよいですか?

分類Dev

MATLABによって配列の最後の要素を削除する時間計算量はどれくらいですか?

分類Dev

mongodb埋め込み配列のすべての要素を更新しています

分類Dev

現在の要素を次の要素と比較しながら、配列の最後の要素を反復処理するにはどうすればよいですか?

分類Dev

配列の最初、最後、2番目、最後から2番目などの要素を出力するにはどうすればよいですか?

分類Dev

配列は最後の要素を未定義として与えます

分類Dev

最後に入力されたint(C)までだけ、不完全に埋められた大きな配列を出力するにはどうすればよいですか?

分類Dev

この 2 つの空の配列の配列が異なる方法で埋められているのはなぜですか?

分類Dev

これは、collectionViewの行を最初から埋めて、最後にスペースを残す方法ですか?

分類Dev

numpy配列の最後に追加して、最初から削除するにはどうすればよいですか?

分類Dev

プロットは上書きされるため、Rループの最後で、すべてがリストの最後の要素からプルされます。私は何が間違っているのですか?

分類Dev

JSは、配列が別の配列に埋め込まれているかどうかを確認します

分類Dev

配列には複数の最後の値が含まれています

分類Dev

この配列の最後の要素が中央の要素ではなくスプライスされているのはなぜですか?

分類Dev

jqueryを使用して新しい配列要素を作成し、配列の最後に追加するにはどうすればよいですか?

分類Dev

ループでは、すべての配列要素が最後の要素の値を取得します

分類Dev

`*((*(&array + 1))-1)`は、自動配列の最後の要素を取得するために安全に使用できますか?

分類Dev

配列を0から2までの乱数で埋めますが、条件に応じて反対のセルが埋められるようにします

分類Dev

pandasは列名をシフトし、最後の列をNANで埋めます

Related 関連記事

  1. 1

    最初の挿入後、配列は不確定な値で埋められます

  2. 2

    列のセルを最後に埋められた行まで埋める方法は?

  3. 3

    Lodashを使用して配列内に埋め込まれた配列からすべてのIDを取得するにはどうすればよいですか?

  4. 4

    欠落している配列要素をFlotのゼロ値で埋めます

  5. 5

    これらのノイズパラメータで2d numpy配列を埋めるより速い方法?現在、各要素をループしています

  6. 6

    Androidでfirestore配列から最後の要素を取得するにはどうすればよいですか?

  7. 7

    Matlabのセル配列から最後の要素を削除するにはどうすればよいですか?

  8. 8

    JSの配列は実際に空のスペースで埋められていますか、それとも印刷時にゼロで埋められていますか?

  9. 9

    PHP in_arrayは、最後の配列要素のみを検索しています

  10. 10

    内部のng-repeatは、配列の最初の項目をスキップし、それらを最後のhtml要素に配置しています

  11. 11

    下のimgのように、行を最後まで均等に埋める要素を作成するにはどうすればよいですか?

  12. 12

    MATLABによって配列の最後の要素を削除する時間計算量はどれくらいですか?

  13. 13

    mongodb埋め込み配列のすべての要素を更新しています

  14. 14

    現在の要素を次の要素と比較しながら、配列の最後の要素を反復処理するにはどうすればよいですか?

  15. 15

    配列の最初、最後、2番目、最後から2番目などの要素を出力するにはどうすればよいですか?

  16. 16

    配列は最後の要素を未定義として与えます

  17. 17

    最後に入力されたint(C)までだけ、不完全に埋められた大きな配列を出力するにはどうすればよいですか?

  18. 18

    この 2 つの空の配列の配列が異なる方法で埋められているのはなぜですか?

  19. 19

    これは、collectionViewの行を最初から埋めて、最後にスペースを残す方法ですか?

  20. 20

    numpy配列の最後に追加して、最初から削除するにはどうすればよいですか?

  21. 21

    プロットは上書きされるため、Rループの最後で、すべてがリストの最後の要素からプルされます。私は何が間違っているのですか?

  22. 22

    JSは、配列が別の配列に埋め込まれているかどうかを確認します

  23. 23

    配列には複数の最後の値が含まれています

  24. 24

    この配列の最後の要素が中央の要素ではなくスプライスされているのはなぜですか?

  25. 25

    jqueryを使用して新しい配列要素を作成し、配列の最後に追加するにはどうすればよいですか?

  26. 26

    ループでは、すべての配列要素が最後の要素の値を取得します

  27. 27

    `*((*(&array + 1))-1)`は、自動配列の最後の要素を取得するために安全に使用できますか?

  28. 28

    配列を0から2までの乱数で埋めますが、条件に応じて反対のセルが埋められるようにします

  29. 29

    pandasは列名をシフトし、最後の列をNANで埋めます

ホットタグ

アーカイブ