私は新しいCプログラマーであり、ポインターと配列が私をめちゃくちゃにしています。エラーは発生せず、コードは正常に実行されます...配列内の一部の要素が意図した以外の値に設定されているため、コードが途中で動作し始めるまで。実行終了後にコードのメモリを視覚化するプログラムがあるかどうか知りたいですか?
例:実行後:
#include<stdio.h>
int main(){
int array[2] = {0,1};
array[1] = 4;
printf("%d\n",array[1]);
}
配列に0と4の2つの要素があるメモリのブロックが表示されます。
今のところ、配列に前のアクションの要素が含まれているという問題が発生しないように、次のようにしてその配列のメモリをクリアします。
memset(tokenized,0,MAX_CHARS);
動作しているように見えますが、バックエンドで実行していると思うことを実際に実行しているかどうかはわかりません。
編集:私は現在Valgrindを使用していますが、知りたいのですが、エラーがどの行を参照しているかをどのように知ることができますか?たとえば、私はこれを手に入れました:
==24394== Source and destination overlap in strncpy(0x7ff000006, 0x7ff000006, 6)
==24394== at 0x4C2C236: strncpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24394== by 0x400D8A: tokenize_quotes (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394== by 0x40184E: main (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394==
==24394== Conditional jump or move depends on uninitialised value(s)
==24394== at 0x4C2C007: strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24394== by 0x400E06: tokenize_quotes (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394== by 0x40184E: main (in /home/zee/Documents/seng265/repos/assignment2/a.out)
==24394==
しかし、エラーがどの行にあるのかわかりませんか?strcpyのおかげで何か知っています!