将单词读入结构数组的函数

时间:2014-10-03 22:40:27

标签: c arrays struct malloc

我正在使用的代码出错,想知道是否有人可以帮助调试。好像我们得到了malloc错误。感谢。

void readWords(char norm_word[MAXSIZE], Word ** array) {
int i = 0;
bool found = false;
int result = 0;

Word * current_pointer = malloc (sizeof(Word*));//creates a temporary variable for each pointer in the array

for (i=0; i<word_counter; i++) {
    current_pointer = *(array+i); //accesses the current pointer
    result = strcmp(norm_word, (current_pointer -> word)); //compares the string to each stored string
    if (result == 0) {
        found = true;
        (current_pointer->freq)++;
        break;
    } 
}

if(!found) {
    if(pointer_counter == word_counter) {
        array = realloc(array, sizeof(array)*2);
        pointer_counter*=2;
    }

    Word * new_pointer = (Word*) malloc (sizeof(Word*));
    strcpy(new_pointer -> word, norm_word);
    *(array + (pointer_counter - 1)) = new_pointer;
    word_counter++;
}
;
}

2 个答案:

答案 0 :(得分:1)

所有指针在您的系统上具有相同的大小。所以sizeof总是为任何指针返回相同的大小。您想为结构分配,因此您需要在没有星号的名称上使用sizeofmalloc之后将返回指向该内存块的指针。

这是一个简短的实现:

#include <iostream>
#include <string>

typedef struct
{
    int num;
    int numnum;
}numbers;


int main(int argc, char ** argv)
{

    numbers* n = (numbers*)malloc(sizeof(numbers));

    n->num = 1;
    n->numnum = 2;

    free(n);

    return 0;
}

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define MAXSIZE 64

typedef struct word {
    char word[MAXSIZE];
    int freq;
} Word;

int word_counter = 0;
size_t pointer_counter = 16;//Number of pointers that ensure

void readWords(char norm_word[MAXSIZE], Word ** array) {
    int i = 0;
    bool found = false;

    Word *current_pointer = *array;

    for (i=0; i<word_counter; i++) {
        if(strcmp(norm_word, current_pointer->word) == 0){
            found = true;
            current_pointer->freq++;
            break;
        }
        ++current_pointer;
    }

    if(!found) {
        if(pointer_counter == word_counter) {
            pointer_counter *= 2;
            *array = realloc(*array, sizeof(Word)*pointer_counter);
        }
        Word *new_pointer = *array + word_counter;
        new_pointer->freq = 1;
        strcpy(new_pointer->word, norm_word);
        ++word_counter;
    }
}

int main(void){
    Word *vocabulary = calloc(pointer_counter, sizeof(Word));
    char norm_word[MAXSIZE];
    while(1==scanf("%s", norm_word)){
        readWords(norm_word, &vocabulary);
    }
    {
        int i;
        for(i = 0; i < word_counter; ++i){
            printf("%s(%d)\n", vocabulary[i].word, vocabulary[i].freq);
        }
    }
    free(vocabulary);
    return 0;
}