- ベストアンサー
なぜエラーになるのでしょう。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define STR_MAX 512 #define LINE_MAX 30000 int main(void){ // ※↓がエラー原因※ char str[LINE_MAX][STR_MAX]; printf("%d\n", sizeof(int)); printf("%d\n", sizeof(int[10])); printf("%d\n", sizeof(char[10])); printf("%d\n", sizeof(char[STR_MAX])); printf("%d\n", sizeof(char[LINE_MAX])); printf("%d\n", sizeof(char[LINE_MAX][STR_MAX])); printf("%d\n", sizeof(long[STR_MAX][LINE_MAX])); printf("%d\n", sizeof(str)); return 1; } というプログラムを実行すると「問題が発生したため~を終了します。ご不便をかけて~」という問題が発生して終了してしまいます。 原因は、 printf("%d\n", sizeof(str)); の部分であるのですが、 char str[LINE_MAX][STR_MAX]; という宣言でメモリ使用量が大きすぎるということでしょうか? しかし、 printf("%d\n", sizeof(char[LINE_MAX][STR_MAX])); printf("%d\n", sizeof(long[STR_MAX][LINE_MAX])); でも正常に実行できているのに・・・ もともとは、何万行もあるテキストファイルを配列に一度格納し、それらを編集して出力しようと思っていたのですが、毎回エラーが発生するので、調べたところ配列宣言の部分 char str[LINE_MAX][STR_MAX]; にエラーがあるということが分かったのですが、原因が分かっても理由がさっぱり分かりません。 googleで配列の上限について調べたり、仕様について調べたのですが、ほしい回答が得られず質問させてもらいました。 分かる方いましたら教えてください。 ちなみにExcelのマクロを組んだときにdim StrTemp(512, 30000) as stringと宣言して Option Explicit Function SampleTest() Dim StrTemp(512, 30000) As String Dim i, j As Integer For i = 1 To 512 For j = 1 To 30000 StrTemp(i, j) = "SampleTest" Next j Next i End Function と処理をすることはできたので、パソコンのメモリ容量が足りないとは思えないのです。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- PCの買換えに伴う筆王の移行方法についての質問。
- Windows11の新PCに旧PCの筆王を移すための手順を求めている。
- 現在使用中の筆王Ver.27が新しいPCで起動しない問題に直面している。
お礼
ありがとうございます。 文法以外にも覚えることがたくさんありそうですね。 参考になりました。