質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1386閲覧

C言語における共有参照に起因するバグ

takahashi1031

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2021/10/22 07:18

C言語における共有参照に起因するようなバグの例

例えばstrcpy関数で文字列のコピーを行ったときに、コピー元の領域をコピー先の領域が一部重複するようなもの
参考(https://hikotech.net/post-100/)

それ以外にC言語で同じ領域を参照することで起きるバグはどのようなものがありますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

バグはどのようなものがありますか。

それについてはノーコメントですが、今時ならC99規格以上が使えるので "restrict" というキーワードである程度判別できるでしょう。
※マニュアル等がC99に則っているかは別途注意が必要。

例えば、重複を許さない memcpy と、許す memmove なら、C99以上的には次のような宣言になっていて、restrict の有無で判別できます。

  • void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
  • void *memmove(void *s1, const void *s2, size_t n);

なお「ノーコメント」と言ったのは、「面倒だから書かない」とか、「それくらい自分で調べろ」とかそういう意味ではなく、「『どのようなバグになるか』を考える意味がない」からです。
restrict を指定してあるにも関わらず重複があれば、C言語的に「未定義」言い方を変えれば「プログラム全体が正常動作する保証が一切なくなる」なので、部分的に何が起こるか考えてもしようがないのです。

投稿2021/10/23 03:50

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

GoogleでC言語 共有領域 破壊を検索で、約 718,000 件が表示されますので、最初の百個ぐらいを読んでみてjはいかがでしょうか。

投稿2021/10/22 10:17

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いろいろある、としかいいようがないです
それぞれ取り上げたら、ここの欄では書ききれません

投稿2021/10/22 09:43

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/10/22 10:20

「いろいろある」のであれば、そのひとつでも挙げれば回答としての価値も上がると思うのですが、そんなことはないですか。
y_waiwai

2021/10/22 11:36

本当にその一つが知りたい、というのであれば、聞いてください<質問くん #この質問自体がいかにも課題のカンニングとしか見えないんで、まあ、ねえ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問