前提・実現したいこと
c言語において、関数の呼び出し先で、引数で渡された2次元配列(1つ目の要素数は固定)の最外周を、mallocを使って動的に確保したいのですが、上手くいきません。助けてください!
発生している問題・エラーメッセージ
Segmentation fault (コアダンプ)
該当のソースコード
#include<stdio.h> #include<stdlib.h> #define LEN (64) void get_num(int *n) { char buf[LEN]; printf("input num\n"); fgets(buf, LEN, stdin); sscanf(buf, "%d", n); } void get_words(int n, char (**p)[LEN]) //pはcharの配列(要素数LEN)の動的配列へのポインタ? { char buf[LEN]; *p = malloc(sizeof(char) * LEN * n); for(int i = 0; i < n; i++){ printf("input words\n%d\t", i + 1); fgets(buf, LEN, stdin); sscanf(buf, "%s", *p[i]); } } void show_words(int n, char (*p)[LEN]) { for(int i = 0; i < n; i++){ printf("%s\n", p[i]); } } int main(void) { char (*p)[LEN]; //pはcharの配列(要素数LEN)の動的配列 int n; //動的配列の要素数n get_num(&n); get_words(n, &p); show_words(n, p); free(p); return 0; }
試したこと
pをグローバル変数にする、あるいは、main関数内でmallocして、get_words(int n, char (*p)[LEN])として単純に文字列の代入だけにすると、取り敢えず動きました。
でも敗北感がすごいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/22 12:16