Я знаю, как создать массив структур, но с предопределенным размером. Однако существует ли способ создать динамический массив структур, чтобы массив мог стать больше?
Например:
typedef struct
{
char *str;
} words;
main()
{
words x[100]; // I do not want to use this, I want to dynamic increase the size of the array as data comes in.
}
Возможно ли это?
Я исследовал это: words* array = (words*)malloc(sizeof(words) * 100);
Я не думаю, что я ясно объяснил, мои извинения.
Я хочу избавиться от 100 и хранить данные по мере их поступления. Таким образом, если в число 76 полей поступает, я хочу сохранить 76, а не 100. Я предполагаю, что я не знаю, сколько данные поступают в мою программу. В описанной выше структуре я мог бы создать первый "индекс" как:
words* array = (words*)malloc(sizeof(words));
Однако я хочу динамически добавлять элементы в массив после. Надеюсь, я достаточно четко описал проблемную область. Основная задача состоит в том, чтобы динамически добавить второе поле, по крайней мере, это проблема на данный момент.
Я сделал небольшой прогресс, однако:
typedef struct {
char *str;
} words;
// Allocate first string.
words x = (words) malloc(sizeof(words));
x[0].str = "john";
// Allocate second string.
x=(words*) realloc(x, sizeof(words));
x[1].FirstName = "bob";
// printf second string.
printf("%s", x[1].str); --> This is working, it printing out bob.
free(x); // Free up memory.
printf("%s", x[1].str); --> Not working since its still printing out BOB even though I freed up memory. What is wrong?
Я проверил некоторые ошибки, и это то, что я нашел. Если после освобождения памяти для x добавьте следующее:
x=NULL;
то, если я попытаюсь распечатать x, я получаю сообщение об ошибке, которое я хочу. Так что бесплатная функция не работает, по крайней мере, на моем компиляторе? Я использую DevC??
Спасибо, я понимаю теперь из-за:
FirstName - это указатель на массив char, который не выделяется malloc, выделяется только указатель, и после того, как вы звоните бесплатно, он не стирает память, он просто отмечает его как доступный по куча будет написана позже. - MattSmith
P.S. Извините за длинную страницу, я думаю, теперь я привык к этому форуму.
У меня проблема. Я понятия не имею, что делать дальше. Пожалуйста, помогите кому-нибудь. Я пытаюсь модулировать и помещать создание моего массива структур в функцию, но он не работает, и я все пробовал, просто ничего не работает. Я пробую что-то очень простое, и я не знаю, что еще делать. Он по тем же линиям, что и раньше, просто другая функция, loaddata, которая загружает данные и вне метода, который мне нужен, чтобы сделать некоторую печать. Как я могу заставить его работать?. Мой код выглядит следующим образом:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
typedef struct
{
char *str1;
char *str2;
} words;
void LoadData(words *, int *);
main()
{
words *x;
int num;
LoadData(&x, &num);
printf("%s %s", x[0].str1, x[0].str2);
printf("%s %s", x[1].str1, x[1].str2);
getch();
}//
void LoadData(words *x, int * num)
{
x = (words*) malloc(sizeof(words));
x[0].str1 = "johnnie\0";
x[0].str2 = "krapson\0";
x = (words*) realloc(x, sizeof(words)*2);
x[1].str1 = "bob\0";
x[1].str2 = "marley\0";
*num=*num+1;
}//
Этот простой тестовый код сбой, и я понятия не имею, почему. Где ошибка?