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

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

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

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

Q&A

解決済

2回答

1080閲覧

入力した値とメモリ領域の先頭アドレスを画面表示する方法

choke

総合スコア2

C

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

0グッド

0クリップ

投稿2021/06/09 06:12

編集2021/06/09 06:38

前提・実現したいこと

以下のような動作をするプログラムを作成したいのですが、4で入力した値を画面表示する方法がわかりません。
どのようにしたら良いでしょうか、教えていただけると嬉しいです。

1 整数型ポインタ変数pを定義する.
2 以下の3~6を無限ループで繰り返す.
3 整数型変数を格納するためのメモリ領域を malloc()を用いて作成し,先頭アドレスをポイ
ンタ変数 p に格納する.
4 キーボードから整数値を入力し,3で作成したメモリ領域に値を格納する.負の値が入力
された場合には,メモリ領域を解放した後でループを抜けて終了する.
5 4で入力した値と,メモリ領域の先頭アドレスを画面表示する.
6 3で作成したメモリ領域を開放する.

該当のソースコード

c

1#include<stdio.h> 2#include<stdlib.h> 3 4int main(void){ 5 6 int *p; 7 8 while(1){ 9 p = (int *)malloc(sizeof(int)); 10 11 printf("数値を入力して下さい->"); 12 scanf("%d",p); 13 14 if(*p<0){ 15 break; 16 } 17 } 18 printf("%d,%p\n",*p,p); 19 20 free(p); 21 return 0; 22}

現在の実行結果

数値を入力して下さい->3
数値を入力して下さい->4
数値を入力して下さい->5
数値を入力して下さい->-1
0,0x601070

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

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

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

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

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

dodox86

2021/06/09 06:23

> 4で入力した値を画面表示する方法がわかりません。 質問としては上記ですが、現状で、6.が満たせていませんね。負の値が入力されたときにしかfree()されていません。
choke

2021/06/09 06:35

6が満たせていなかったことに気付いていませんでした。ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

free(p)した後で、printf("%d,%p\n",*p,p);のところで*pを参照しているのでエラーです。

投稿2021/06/09 06:20

otn

総合スコア84798

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

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

choke

2021/06/09 06:44

コメントありがとうございます。4で負の値が入力された場合はメモリ領域を解放した後でループを抜けて終了する.との指示があるのですが、この場合printfでの指定を*p以外に変更すれば条件は満たせるでしょうか..?
otn

2021/06/09 06:57

解放したら、参照できないのでprintf出来ません。 そもそもこのプログラムは入力したデータを全部捨てているので、 データを全部捨てた後で何をprintfしたいのか、よく考える必要があります。
choke

2021/06/09 07:54

確かにそうですね。今一度考え直して見たいと思います。ご丁寧にありがとうございました。
guest

0

そのprintfの文を1行上に持っていけばどうでしょう(上のカッコの中)

投稿2021/06/09 06:15

y_waiwai

総合スコア87800

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

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

choke

2021/06/09 06:47

コメントありがとうございます。教えていただきました方法ですと 数値を入力して下さい->1 1,0x601010 数値を入力して下さい->2 2,0x601030 数値を入力して下さい->-1 という形になるのですがこれを 数値を入力して下さい->1 数値を入力して下さい->2 数値を入力して下さい->-1 1,0x601010 2,0x601030 という形にすることは可能でしょうか..?
y_waiwai

2021/06/09 06:58

可能ですけど、あなたの質問文はそうなってませんよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問