Я получаю ошибку, которую вы можете увидеть в названии, и я не могу понять, почему.glibc обнаружен - двойной свободный или коррупционный (! Prev)
Код:
#include <cstdlib>
#include <cstdio>
struct CData {
int* num;
char* adr;
char* ph;
void (*init)(CData* owner);
void (*del)(CData* owner);
char* (*getAdr)(CData* owner);
void (*setAdr)(CData* owner, char* adr);
};
void CData_init(CData* owner) {
owner->num = (int*)malloc(sizeof(int));
owner->adr = (char*)malloc(sizeof(char)*255);
owner->ph = (char*)malloc(sizeof(char)*255);
}
void CData_del(CData* owner) {
free(owner->num);
free(owner->adr);
free(owner->ph);
}
char* CData_getAdr(CData* owner) {
return owner->adr;
}
void CData_setAdr(CData* owner, char* adr) {
owner->adr = adr;
}
int main() {
CData* data = (CData*)malloc(sizeof(CData));
data->init = CData_init;
data->del = CData_del;
data->getAdr = CData_getAdr;
data->setAdr = CData_setAdr;
data->init(data);
data->setAdr(data, "asdasd");
printf("%d", data->getAdr(data));
data->del(data);
free(data);
return 0;
}
Так что я думаю, что ошибка вызвана полукокс * манипуляциями, но я не знаю, почему.
Что я хочу сделать, так это то, что я могу передать строку как параметр в data->setAdr
, и я хочу, чтобы она была назначена переменной после этого.
Составление линии:
gcc -o test main.cpp
«double free» - это должно что-то сказать, может быть, что-то вроде «double' free() '» – bitcell
Вам не разрешено освобождать строковые литералы. (И вы утечка предыдущего значения в 'setAdr'.) – Mat
Да, я сделал такое предположение сначала, но где? – ohyou