質問するログイン新規登録
C

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

Q&A

解決済

1回答

950閲覧

C言語でスタックメモリのサイズを知りたい

K-Sakurai404

総合スコア3

C

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

0グッド

1クリップ

投稿2023/11/21 09:50

0

1

実現したいこと

スタックメモリの容量を知りたいです。
そこで、スタックオーバフローを意図的に起こす方法を教えてください。
プログラムを作って、実際に出力する場合とデバッグでエラーを起こす場合の両方知りたいです。

前提

C言語。
以下のプログラムに記述を加えて、スタックメモリの容量を知りたいです。

#include <stdio.h> int main(void){ char box[]; return 0; }

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

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

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

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

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

hoshi-takanori

2023/11/21 10:08

無限に再帰呼び出しするとか…。
退会済みユーザー

退会済みユーザー

2023/11/21 10:11

それ以上の說明は不要だと思いますね
otn

2023/11/22 00:12 編集

目的がよくわかりません。 スタックサイズは普通は設定内容を確認しますが (Linuxだとシェルコマンドの ulimit -s でKB単位の数値が出ます)、 スタックサイズ自体を知るのが目的じゃなくて、スタックオーバーフローを起こすのが目的ということでしょうか?
thkana

2023/11/21 10:58

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13288534078 この辺のクラス違いとかいう気がして仕方がありませんけれど。 「C言語」の範囲ではスタックオーバーフローしたことを知るのは(大胆にオーバーフローして例外が発生したり壊滅的打撃を受けてクラッシュしたりした場合以外は)不可能と言っておけばいいんじゃないかしら。 もちろん、そういうことをシステムに問い合わせる関数があるなら別ですけれど。それなら環境を指定してもらわないと。
ikedas

2023/11/21 12:54 編集

前提とするオペレーティングシステムは何ですか。それによって知る方法は変わることがあります。 返答はこのコメント欄に書くのではなく、質問文を編集して書いてください。
guest

回答1

0

ベストアンサー

コード上からスタックのサイズを取得するためには、あらかじめリンカスクリプト上でスタックのエリアの先頭後尾にラベルを設定しておいてそれを参照するなどすれば可能かと思います。
あるいは、あなたの使っているコンパイラ/リンカの仕様から、スタックエリアに関わるラベルなどが設定されているか、を調査することです

スタックオーバフローを意図的に起こす方法を教えてください。
スタックサイスを超えるサイズのローカル変数を定義してやれば、起こせます
ただ、Cでは実行時のエラーチェックは行わないため、オーバーフローが起こったとしてもそれを知る方法はありません

投稿2023/11/21 22:27

y_waiwai

総合スコア88180

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問