0
void OneDToTwoD(char* rel){

  /*  all the declarations here */

  while(rel[i] != '\0'){
    i++;
  }

...

上記のコードでは、すべての「時々」セグメンテーション違反が発生しています。valgrindチェックは、行で「サイズ1の無効な読み取り」をスローします while(rel[i] != '\0'){

その行で、私はの長さを把握しようとしていrelます。私はこれを行うためのより良い方法があるに違いないことを知っています。どうしてもできないのsizeof

4

1 に答える 1

2

iがゼロとして初期化されrel、有効なメモリブロックを指している場合、これは適切に機能します。

  1. rel無効なメモリブロックまたはNULLを指しています。
  2. relはで終了しません\0
  3. i0で開始されていません。

そしてもう1つ、ポインタからメモリブロックのサイズを知ることはできません。ポインタはメモリブロックではありません。必要に応じて、ポインタで無効なメモリブロックを指定できます。したがって、メモリブロックの長さを知りたい場合はlength、関数に引数を追加してください。

于 2012-11-27T04:56:55.740 に答える