Я пытаюсь выделить некоторую память с помощью realloc(). Это работает до сих пор. Но если я хочу, чтобы назначить выделенную память на указатель в переменной структуры, я получаю ошибку сегментации:Ошибка сегментации после realloc(). Не удается назначить выделенную память указателю
// in header
typedef struct {
int a;
char test[20];
} MyContent;
typedef struct {
MyContent* values;
// simmilar to: MyContent values[]
// ... some other stuff
} MyData;
// in source
void myFunction(MyData* dataPtr) {
dataPtr->values = NULL;
MyData* tempPtr = NULL;
for (int i = 1; i < 10; i++) {
tempPtr = (MyContent*) realloc(dataPtr->values, i * sizeof(MyContent));
if (tempPtr == NULL) {
free(dataPtr->values);
break;
}
dataPtr->values = tempPtr; // Here I get the segmentation fault
dataPtr->values[(i-1)].a = 42;
// ...
}
}
Я не могу понять, что происходит не так здесь. Какие-либо предложения? Спасибо за вашу помощь.
Ошибка в коде, который вы не ввели. В приведенном выше коде есть только одна существенная проблема - он неправильно описывает случай, когда 'realloc' возвращает' NULL'. Если вы можете опубликовать полный, компилируемый пример, который показывает ошибку, мы, возможно, найдем его для вас. В противном случае запустите 'valgrind' в вашем коде. (Кстати, это код C или код на C++? Вы помещаете оба тега, и это делает его очень запутанным.) –
@DavidSchwartz, код OP, который будет опубликован, будет скомпилирован и запущен под C или C++ просто отлично :) – bdonlan
@ bdonlan: Правильно, так что это невозможно понять, о чем он спрашивает. Если бы я собирался протестировать его, например, должен ли я проверить его как код C или код на C++? Если я собираюсь предложить исправления/изменения, должны ли они быть C или C++-кодом? –