Заполнение динамического массива char приводит к перезаписи - PullRequest
0 голосов
/ 08 сентября 2018

У меня следующая проблема. Я выделил 2d динамический массив символов в C. Однако, когда я пытаюсь заполнить этот массив уникальными строками в каждой строке, каждая запись перезаписывает предыдущие. Таким образом, я получаю массив, который имеет только последнюю строку в каждом сырье. Можете предложить некоторые идеи? Спасибо.

FILE *dictionary;
dictionary = fopen("dictionary.txt","r");

if (dictionary == NULL)
{
    printf("can not open dictionary \n");
    return 1;
}
char line[512];
char** hashes;
hashes = malloc(250*512);

if(!hashes){
    printf("OUTOFMEMORY\n");
    return;
}

i=0;
char *salt;
salt = extract_salt(shd);
char* encrypted;
while(fgets(line, sizeof(line), dictionary))
{
    //hashes[i] = calculate_hash(shd, line);
    encrypted = crypt(line, salt);
    printf("%s\n",encrypted );
    strcpy(hashes[i],encrypted );

    if(i>0)
        printf("%s, %s \n", hashes[i], hashes[i-1]);
    i++;
}

1 Ответ

0 голосов
/ 08 сентября 2018
char** hashes; 

эта строка объявляет указатель на указатель на символ, а не на двумерный массив.

вам нужно изменить инициализацию на:

char** hashes;
hashes = malloc(250 * sizeof(*hashes));

if(!hashes){
    printf("OUTOFMEMORY\n");
    return;
}

for(size_t index = 0; index < 250; index++)
{
   hashes[index] = malloc(512);
   if(!hashes[index]){
       /* memory allocation error routines */
   }
}
...