저는 최근 C에서 저의 석사 학위 논문을 작성하기 시작했습니다. 오랫동안 사용하지 않았습니다. Java에 익숙해지면서, 나는 항상 모든 종류의 문제에 직면하고 있습니다. 나는 지난 2 일 동안 누군가와 고투하고 있었기 때문에 누군가 다음 날을 도울 수 있기를 바랍니다.메모리 할당 및 값 할당에 관한 기본 C 질문
그래서 저는 테이블, 튜플, 애트리뷰트 등의 데이터베이스에 대한 기본적인 모델을 가지고 있습니다.이 구조에 데이터를로드하려고합니다. 정의는 다음과 같습니다 :
typedef struct attribute
{
int type;
char * name;
void * value;
} attribute;
typedef struct tuple
{
int tuple_id;
int attribute_count;
attribute * attributes;
} tuple;
typedef struct table
{
char * name;
int row_count;
tuple * tuples;
} table;
데이터 내가 구문 분석있어 (위스콘신 벤치 마크에 대해 생성) 삽입을 가진 파일에서오고있다. 정수 또는 문자열 값만 있습니다. 샘플 행은 다음과 같습니다.
insert into table values (9205, 541, 1, 1, 5, 5, 5, 5, 0, 1, 9205, 10, 11, 'HHHHHHH', 'HHHHHHH', 'HHHHHHH');
데이터를로드하고 구문 분석하고 할당 할 수도 있습니다. 그러나 모든 값은 동일한 메모리 위치를 가리 키므로 데이터를로드 한 후에 모든 행이 동일하게 보이므로 할당 비트가 버그가 있습니다. 다음은 내가하는 일입니다.
나는 이것이 완벽하게 인식하지 못하고 왜 작동하지 않는지, 나는 어떻게 작동시키는 지 알 수 없습니다. 다음 중 어떤 것도 작동하지 않았습니다. 어떤 작업도 수행하지 않았습니다.
memcpy(current_tuple->attributes[k].value, &v, sizeof(int));
이 경우 액세스 오류가 발생합니다.
또한 내가했습니다 ... 방어 적이기 내가 여기 필요한 경우
memcpy(current_tuple->attributes[k].value, &v, 1);
도 확실하지 : (나는 하나의 올바른 사용을 될 것이라고 확신 아니에요 이후) 다음 코드를 동일 같은 것을 수행하여 메모리를 할당 시도 : "개체 0x100108e98는 *** 오류 : malloc에를 잘못된 체크섬을 해제 개체에 대해 - 객체가 아마 해제 후 수정되었습니다."
current_tuple->attributes[k].value = (int *) malloc(sizeof(int));
만 얻을 수 있습니다 이 오류를 이해하는 한,이 개체에 이미 메모리가 할당되어 있지만이 문제가 발생한 곳을 알 수 없습니다. malloc (sizeof (attribute))은 정수와 두 개의 포인터 (즉, 포인터가 가리키는 메모리가 아닌)를 저장하는 데 필요한 메모리 만 할당합니까?
도움이 될 것입니다.
안부, 바실 당신 attribute
의 value 필드의 문자열에 대한 포인터를 저장하고 문자열 그래서
많은 분들께도 감사드립니다! 다른 유형에 대해서 - 나는 분기를 했으므로 여기에있는 예제에는 포함하지 않았다. 그리고 당신은 아마 맞을 것입니다. C에 대한 내 학부생의 지식은 부족한 것 같습니다. 나는 도서관에 들러서 당신이 추천 한 책을 찾아야합니다. – VHristov