私は単語を取り、そのアナグラムを見つけて、与えられた辞書ファイルからアナグラムのリストを返すアナグラムプログラムを作っています。私は、ハッシュマップのリンクされたリストと、ハッシュマップの各ノードのリスト(私の割り当てに従って)を使用しています。私はC言語にはかなり新しいので、メモリとポインタに関して多くの問題を抱えています。関数がポインタを返すときに、なぜ "初期化は整数からポインタを作る"のですか?
私はコンパイル時に私が取得しています一般的なエラーのいくつか: 警告:初期化は、キャスト リストなし整数からポインタになります* PLIST = getListFromMap(キー); これはわかりませんが、pListはリストポインタで、getListFromMapはリストポインタを返しています。
getListFromMapため競合型() リスト* getListFromMap(INTキー){getListFromMapの
前delcarationはここ getListFromMap(キー)でした。 フォワード宣言についてお読みになりましたか?私はこの仕組みがどういうものか分かりませんが、試してみるのは間違いです。あなたは、「初期化が整数からポインタを作る」警告を受ける
typedef struct list {
char *word;
struct list *next;
} list;
typedef struct hashmap {
list *words;
int key;
struct hashmap *next;
} hashmap;
hashmap *pMapHead;
hashmap *pMapCurr;
list *pListHead;
list *pListCurrd;
int sum = 0; // sum of words
int hCount = 0;
void addWordsToMap(int key, list *words) { // create hashmap
hashmap *pHash = pMapHead;
pMapCurr = pHash;
while (pMapCurr) {
pMapCurr = pMapCurr->next;
}
pMapCurr->words = words;
pMapCurr->key = key;
pMapCurr->next = NULL;
hCount += 1;
}
list *addWord(int key) {
pListHead = getListFromMap(key);
pListCurr = pListHead;
while (pListCurr) {
pListCurr = pListCurr->next;
}
pList->word = word;
pList->next = NULL;
pCurr->next = pList;
pCurr = pList;
return pListHead;
}
list *getListFromMap(int key) {
hashmap *map = pMapHead;
pMapCurr = map;
while (pMapCurr != NULL) {
if (pMapCurr->key == key) {
return pMapCurr->words;
free(map);
}
pMapCurr = pMapCurr->next;
}
}
int getSum(char* word) {
int sum = 0;
int i = 0;
while (word[i]) {
word[i] = toupper(word[i]);
sum += word[i] - '@';
i++;
}
return sum;
}
void loadWords() {
FILE* dict = fopen("/home/akw54/Desktop/CS283/akw54-cs283- summer2016/A1/dict", "r");
if (dict == NULL) {
return;
}
pListHead = (list *) malloc(sizeof(pListHead));
pListCurr = pListHead;
pMapHead = (hashmap *) malloc(sizeof(pMapHead));
pMapCurr = pMapHead;
int key = 0;
list wordList;
char word[128];
while(fgets(word, sizeof(word), dict) != NULL) {
key = getSum(word);
addWordsToMap(key, addWord(key));
}
free(dict);
}
void main() {
loadWords();
free(pMapHead);
free(pMapCurr);
free(pListHead);
free(pListCurr);
}
、あなたが持っていることを確認し、少なくとも機能のいずれかを使用中の前に現れる関数のプロトタイプあなたのコード。 – Dmitri
getListFromMapが返された後のfree()の呼び出しは決して実行されません。これはおそらく良いことです。常に何かを返すとは限らないという事実は良いことではありません。 –
この質問の多くの、多くの*出現の1つは[ここに** **見ることができます**](https://stackoverflow.com/questions/13314049/warning-initialization-makes-pointer-from-integer-without-キャスト)。 – WhozCraig