1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C言語では int 型のポインタを宣言するだけで、領域が確保されているのか

Last updated at Posted at 2017-01-27

概要

int型とuint8_t型のポインタで挙動が異なり、理由を調べようとしたが、キーワードが不明で行き詰ってしまったためアップ

追記:
皆様のコメントにより、解決致しました。

問題となるコード

// コード1
int* iptr;
*iptr = 10;   // Segmentation Fault にならない
printf("%d\n",*iptr); // 10が出力

上でなぜ 10 が出力されるのか、わからない。
普通は、以下のどちらかで宣言している。

// コード2
int val = 10;
int* iptr1;
iptr1 = &val;

// コード3
int* iptr2;
iptr2 = (int *) malloc( sizeof( int));
*iptr2 = 10;

uint8_t 型でコード1 を書き直すと、Segmentation Fault になる。

uint8_t* uptr;
*uptr = 0x1; // Segmentation Fault

uint8_t 型だと、(教科書どおりの?)コード2 のやり方でないといけない。

疑問点

int型では内部的に勝手に malloc が呼ばれているのだろうか。
int型はそもそもどこで定義されているのだろうか。

int 宣言などで調べても出てこないため、同じ疑問を持っている人が
いるかもしれないため、申し訳ありませんが投稿しました。

1
2
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?