제목에서 볼 수있는 오류가 발생하며 그 이유를 알 수 없습니다.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