hashInsert()関数に二次元配列のポインタを渡して、数値をhashArray[][]に代入したいのですが、物凄く大きな値がprintf("%d %d\n", hashArray[0][1], hashArray[0][2]);に出力されてしまいます。どこがおかしいのでしょうか?
C
1#include <stdio.h> 2#include <string.h> // strtok, strlen, memset 3#include <stdlib.h> // malloc 4#include <ctype.h> // isdigit 5#include <stdlib.h> // atoi 6 7int spacePart(char str[], char **num, int cnt); 8int numCheck(char *num[], int numCnt); 9void hashInsert(char *num[], int *hashArray[][7], int numCnt); 10// ハッシュ探索を行う関数 引数:なし 戻り値:0 メモリ確保できない-1 11int main() 12{ 13 int flg = 0, numCnt, find, *hashArray[100][7] = {}; 14 char str[1000], *num[100]; 15 // メモリ確保 16 *num = (char *)malloc(sizeof(str)); 17 18 // メモリ確保失敗 19 if(num ==NULL) 20 { 21 printf("メモリの確保に失敗しました。"); 22 return -1; 23 } 24 while(flg == 0) 25 { 26 puts("100個以内の数値を入力してください。"); 27 fgets(str, 1000, stdin); 28 29 // 文字列を空白ごと分け、入力値の数を代入する 30 numCnt = spacePart(str, num, 100); 31 32 // 入力値が数値だったら 33 if(numCheck(num, numCnt) == 1) flg = 1; 34 else puts("入力値が正しくありません。"); 35 } 36 // ハッシュ値に数値を代入する 37 hashInsert(num, hashArray, numCnt); 38 39 40//ここでなーい 41printf("%d %d\n", hashArray[0][1], hashArray[0][2]); 42 43 44 printf("探索対象の数値を入力してください:"); 45 scanf("%d", find); 46 free(*num); // メモリ解放 47 return 0; 48} 49 50// 文字列を空白ごとに分けて配列に格納し、入力値の数を返す関数 51// 引数:入力値、配列、100 戻り値:数値の数 52int spacePart(char str[], char **num, int cnt) 53{ 54 // 空白区切りに文字列を分割 55 num[0] = strtok(str, " \n"); 56 int i; 57 58 // 最大100個 59 for(i = 1; i < cnt; i++) 60 { 61 num[i] = strtok(NULL, " \n"); 62 // 区切った文字列がNULLだったら 63 if(num[i] == NULL) break; 64 } 65 num[i] = NULL; // 終わりのしるし 66 return i; 67} 68 69// 入力文字列が数値がチェックする関数 引数:入力値 戻り値:数値1 数値ではない0 70int numCheck(char *num[], int numCnt) 71{ 72 char *temp; 73 // 配列に値がある間 74 for(int i = 0; i < numCnt; i++) 75 { 76 temp = num[i]; 77 for(int j = 0; j < strlen(temp); j++) 78 { 79 // 数値ではなかったら 80 if( !isdigit(temp[j]) ) return 0; 81 } 82 } 83 return 1; 84} 85 86// 入力した数値を7で割った余りの配列に代入する関数 87// 引数:入力値、ハッシュ配列、数値の数 戻り値:なし 88void hashInsert(char *num[], int *hashArray[][7], int numCnt) 89{ 90 int j = 0; 91 for(int i = 0; i < numCnt; i++) 92 { 93 // メモリ確保 94 hashArray[j][atoi(num[i]) % 7] = (int *)malloc(100); 95 if(*hashArray[j][atoi(num[i]) % 7] == 0) *hashArray[j][atoi(num[i]) % 7] = atoi(num[i]); 96 else j++; 97 } 98 free(hashArray); // メモリ解放 99}
その言ってるところはどこの話なんでしょうか