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

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

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

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

Q&A

2回答

1029閲覧

Segmentation faultの沼

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2021/11/29 03:31

15文字以内で構成される複数のアルファベットの文字列のソート(辞書順)を行いたいのですが、以下のようにエラーが出てしまい、解決ができません。自分のプログラムだとメモリが確保できていないということでしょうか?
条件として、0が入力されるまで単語の入力は続き、行数の指定はできません。

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int i, j; char **words, *cp; int n = -1; printf("Input words\n"); words = (char **)malloc(16*sizeof(char *) ); while ( ( words[n][0]=getchar() ) != '0' ) { n++; words[n] = (char *)malloc(words, 16*sizeof(char) ); } for(i=1;i<n;i++) { for(j=1;j<n;j++) { if(strcmp(words[j-1], words[j])>0) { strcpy(cp, words[j-1]); strcpy(words[j-1], words[j]); strcpy(words[j], cp); } } } for(i=0; i<n; i++) { printf("&s\n", words[i]); } return 0; }

---実行例---

$ ./test
Input words
emacs
Segmentation fault (core dumped)

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

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

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

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

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

fana

2021/11/29 04:05

I think you should learn the basics of C first.
BeatStar

2021/11/29 10:23

それで退会と…
guest

回答2

0

プログラムの流れも、malloc で "何の" メモリを確保し値がどうなっているかの認識も間違っているように思います。

c

1words = (char **)malloc(16*sizeof(char *) );

は 16 個の char* の配列の領域を確保しています。
ですが、その 16 個の各要素の値は未設定(=不明)です。
その状態で

c

1words[n][0]=getchar()

を行えば、まず n = -1 ですので words[-1] に入っているアドレスを用いようとし、まず malloc 外でしょう。
さらに、 (0 <= n < 16 だったとしても ) 、 words の各要素は未設定でありんな値が入っているか分かりませんので、words[n][0] は何処を指すか分かりません。大概はエラーとなるでしょう。

投稿2021/11/29 03:49

jimbe

総合スコア13209

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

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

0

words = (char **)malloc(16*sizeof(char *) );

while ( ( words[n][0]=getchar() ) != '0' ) {

words には、16個のポインタ分の領域が確保されました。
しかし、その領域は初期化されていません
words[n] にはなにが入ってるのか説明できるでしょうか

まずは、ここでメモリ破壊が起こってます

#おまけにnは-1だし

投稿2021/11/29 03:39

編集2021/11/29 03:41
y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問