### 前提
はじめまして
現在、大規模データ解析用のプログラムをC言語で書いています。以下のようなメモリの動的な割り当てを行い、データを読み込む部分を作成しました。
プログラムを実行するサーバー(128GBのメモリを搭載)は、以下のソースコードから生成されるプログラムが要求するメモリの容量の領域を確保できると判断しています。OSはCentOS6.5で、コンパイルなどはgccで行っています。
発生している問題・エラーメッセージ
以下のコードにあるようにmallocで別々に確保した領域にデータを書き込むように設計したのですが、datahe[i]のポインタが示す領域にデータを書き込んだにも関わらず、datage[i] (i>300000以降)のポインタが示す領域にデータが書き込まれ、//datage loading data//で示す部分で読み込まれたデータか書き換えられてしまいます。原因の究明を行っているのですが現在、解決に至っていません。
//memory allocation// の部分にあるprintfで表示するようにしているerror1, 2, 3は表示されませんでした。
経験が浅いため、原因を突き止めるのに必要な情報が欠けている可能性があることご了承ください。また、情報が欠けている場合、ご教示いただけると幸いです。
該当のソースコード
C
1int main() 2{ 3//memory allocation// 4char *datahe[500000]; 5int i; 6int i2; 7 for (i = 0; i < 500000; i++) 8 { 9 datahe[i] = NULL; 10 datahe[i]=(char *)malloc(1000); 11 if (datahe[i] == NULL) 12 { 13 printf("error1\n"); 14 } 15 } 16 17char *datage[300000]; 18 for (i = 0; i < 300000; i++) 19 { 20 datage[i] = NULL; 21 datage[i]=(char *)malloc(1000); 22 if (datage[i] == NULL) 23 { 24 printf("error2\n"); 25 } 26 } 27 for (i = 0; i < 300000; i++) 28 { 29 for (i2 = 0; i2 < 500000; i2++) 30 { 31 if(datage[i] == datahe[i2]) 32 { 33 printf("error3\n"); 34 } 35 } 36 } 37 38char listtad[30000][100] = {}; 39char extract[50][300] = {}; 40char *ret; 41 42FILE *fpi; 43FILE *fpi2; 44FILE *fpo; 45long ili = 0; 46long ige = 0; 47long ihe = 0; 48long ilip = 0; 49long j = 0; 50long ip = 0; 51long jp = 0; 52long jp2 = 0; 53int jug = 0; 54int nr = 0; 55// list loding data // 56if ((fpi = fopen("./input_data/list_CC.txt","r")) == NULL) 57 { 58 printf("error read file 0\n"); 59 }else{ 60 jug = 1; 61 while (fgets(listtad[ili],100,fpi) != NULL) 62 { 63 ili++; 64 } 65 fclose(fpi); 66 } 67// datage loading data // 68if ((fpi = fopen("./input_data/GE_and_CC.txt","r")) == NULL) 69 { 70 printf("error read file 1\n"); 71 jug = 0; 72 }else{ 73 while (fgets(datage[ige],1000,fpi) != NULL) 74 { 75 nr = 0; 76 while((datage[ige][nr] != '\n') && (nr < 1000)) 77 { 78 nr++; 79 } 80 datage[ige][nr] = '\0'; 81 ige++; 82 } 83 fclose(fpi); 84 } 85// datahe loading data // 86if ((fpi2 = fopen("./input_data/HE_and_CC.txt","r")) == NULL) 87 { 88 printf("error read file 2\n"); 89 jug = 0; 90 }else{ 91 while (fgets(datahe[ihe],1000,fpi2) != NULL) 92 { 93 nr = 0; 94 while((datahe[ihe][nr] != '\n') && (nr < 1000)) 95 { 96 nr++; 97 } 98 datahe[ihe][nr] = '\0'; 99 ihe++; 100 if (ihe == 499999) 101 { 102// data analysis part// 103 ...... 104// part end // 105 ihe = 0; 106 } 107 } 108 } 109
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/20 15:43