二重ポインタについて

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

二重ポインタについて

#1

投稿記事 by toto » 14年前

初歩的かもしれませんが検索しても見つからないため質問させていただいきます
構造体のポインタのメンバの二重ポインタを配列で扱おうと思うのですができません
領域の確保の仕方がまずいのでしょうか?それとも配列での扱い方がおかしいのでしょうか?

コード:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct{
  char *a;
  char **b;
} name;

int main()
{
  name *to;
  int i,j;

  to = (name *)malloc(sizeof(name )*100);
  to->a = (char *)malloc(sizeof(char )*100);
  to->b = (char **)malloc(sizeof(char *)*100);

  to[0].b[0] = "aaa";
  to[1].b[1] = "bbb";
  
  printf("%s\n",to[0].b[0]);
  printf("%s\n",to[1].b[1]);

  return 0;

}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 二重ポインタについて

#2

投稿記事 by みけCAT » 14年前

コード:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct{
  char *a;
  char **b;
} name;
 
int main()
{
  name *to;
  int i,j;
 
  to = (name *)malloc(sizeof(name )*100);
  /*to->a = (char *)malloc(sizeof(char )*100);
  to->b = (char **)malloc(sizeof(char *)*100);*/
 
  for(i=0;i<100;i++) {
	to[i].a=(char *)malloc(sizeof(char )*100);
	to[i].b=(char **)malloc(sizeof(char *)*100);
    for(j=0;j<100;j++) {
      to[i].b[j]=(char *)malloc(sizeof(char )*100);
	}
  }
 
  to[0].b[0] = "aaa";
  to[1].b[1] = "bbb";
  
  printf("%s\n",to[0].b[0]);
  printf("%s\n",to[1].b[1]);
 
  for(i=0;i<100;i++) {
	free(to[i].a);
    for(j=0;j<100;j++) {
      free(to[i].b[j]);
	}
	free(to[i].b);
  }
  free(to);
 
 
  return 0;
 
}
あくまで確保したのは「ポインタ」なので、そのポインタがさす先もきちんと確保しましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

toto

Re: 二重ポインタについて

#3

投稿記事 by toto » 14年前

ご返信ありがとうございます。
なるほど、指す先が確保出来ていなかったのですね・・・
ほかは出来ていたのですが、ここの部分だけができなくて質問させていただいきました。
ありがとうございます。

閉鎖

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