Я пытаюсь выделить память с помощью 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++? Вы ставите оба тега, и это очень запутывает.) - person David Schwartz   schedule 25.04.2012void*
автоприведения и не называйте свои переменныеclass
:) - person bdonlan   schedule 25.04.2012dataPtr->values
, который по-прежнему равенMyContent*
... - person bdonlan   schedule 25.04.2012