malloc()の動作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みー

malloc()の動作

#1

投稿記事 by みー » 15年前

int i[10];
i=(int)malloc(20);
とした場合、変数宣言時に確保されたメモリはどうなるのですか??
宣言時のメモリは解放され、malloc()で新たに確保された領域のみが配列として使用されるのでしょうか??

それから配列のアドレスを表示しようとして、
printf("str[0]:%p",str[0]);
と書いたのですが、どうもおかしな値が出力されます。
これはポインタ変数を使わないといけないのでしょうか??

box

Re:malloc()の動作

#2

投稿記事 by box » 15年前

> int i[10];
> i=(int)malloc(20);
> とした場合、変数宣言時に確保されたメモリはどうなるのですか??

こういうことはできません。コンパイルエラーが出ます。
配列として確保した領域 i の先頭要素へのアドレスを、
malloc()の戻り値で上書きすることはできません。

それとも、お手元にあるコンパイラでは上記のことができたのでしょうか?

> それから配列のアドレスを表示しようとして、
> printf("str[0]:%p",str[0]);
> と書いたのですが、どうもおかしな値が出力されます。

str[/url]の先頭要素のアドレスを出力する場合、
printf("str[0]:%p",str);
のように配列名だけを書くか、あるいは
printf("str[0]:%p",&str[0]);
のように、配列の先頭要素str[0]のアドレスであることを明示するかです。
C言語では、配列名は当該配列の先頭要素のアドレスを表わします。

みー

Re:malloc()の動作

#3

投稿記事 by みー » 15年前

僕の勘違いでした。申し訳ありません。


//ソース
#include <stdio.h>
int main (void)
{
char str[4][4];
int count1=0,count2=0;
while(count1<=4)
{
printf("str[%d][%d]:%p\n",count1,count2,&str[count1][count2]);
count2++;
if (count2==5)
{
count2=0;
count1++;
}
}
return 0;
}

//出力結果
str[0][0]:0012FF7C
str[0][1]:0012FF7D
str[0][2]:0012FF7E
str[0][3]:0012FF7F
str[0][4]:0012FF80
str[1][0]:0012FF80
str[1][1]:0012FF81
str[1][2]:0012FF82
str[1][3]:0012FF83
str[1][4]:0012FF84
str[2][0]:0012FF84
str[2][1]:0012FF85
str[2][2]:0012FF86
str[2][3]:0012FF87
str[2][4]:0012FF88
str[3][0]:0012FF88
str[3][1]:0012FF89
str[3][2]:0012FF8A
str[3][3]:0012FF8B
str[3][4]:0012FF8C
str[4][0]:0012FF8C
str[4][1]:0012FF8D
str[4][2]:0012FF8E
str[4][3]:0012FF8F
str[4][4]:0012FF90


となったのですが、ひとつ質問があります。
例えばstr[3][4]とstr[4][0]、同じアドレスを出力していますよね。これは同じメモリを使っているということですか??
つまりstr[3][4]==str[4][0]ということなのでしょうか??

box

Re:malloc()の動作

#4

投稿記事 by box » 15年前

>char str[4][4];

この定義だと、

>str[0][4]:0012FF80
>str[1][4]:0012FF84
>str[2][4]:0012FF88
>str[3][4]:0012FF8C
>str[4][0]:0012FF8C
>str[4][1]:0012FF8D
>str[4][2]:0012FF8E
>str[4][3]:0012FF8F
>str[4][4]:0012FF90

これらは配列の定義範囲外であることはおわかりですか?

みー

Re:malloc()の動作

#5

投稿記事 by みー » 15年前

すみません。変な事いいました。忘れてください。
ありがとうございましたw。

閉鎖

“C言語何でも質問掲示板” へ戻る