이 구조체에 메모리를 할당하고 해제하는 방법을 파악하는 데 어려움을 겪고 있습니다.이 중첩 구조를 올바르게 할당하는 방법은 무엇입니까?
이 기능을 사용하여 Newton Interpolation에 사용할 FiniteTable을 만들어야합니다.
typedef struct{
unsigned int empty;
float value;
}FiniteTableValue;
첫 번째 주먹은 진정한 가치를 지닌 종류의 노드입니다.
typedef struct{
FiniteTableValue *column;
unsigned int length;
}FiniteTableRow;
FiniteTableRow는 FiniteTableValues의 배열을 유지합니다.
typedef struct{
FiniteTableRow *row;
unsigned int length;
}FiniteTable;
FiniteTable은 FiniteTableRow의 배열을 유지합니다.
typedef struct{
FiniteTable *tables;
unsigned int length;
}FiniteTableList;
FiniteTableList 내가 Valgrind의 그것을 debugg하려고 FiniteTable의
의 목록입니다 그리고 내가 항상 내가 할당하지 않은 일부 주소에 액세스 보인다.
또한이 방법으로 모두 할당을 해제 할 수 있습니까? 당신의 해제의 예에서
FiniteTableList *ftl ...
...
for(int i = 0; i < ftl->length; i++){
FiniteTable table = ftl->tables[i];
for(int j = 0; j < table.length; j++){
FiniteTableRow row = table.row[j];
free(row.column);
}
free(table.row);
}
free(ftl->tables);
free(ftl);
valgrind 오류 란 무엇입니까? 정의되지 않은 데이터가 포함 된 경우'--track-origins = yes'로 실행하십시오. –
"조건부 점프 또는 이동은 초기화되지 않은 값에 달려있다."나는 어디 있는지 알고있다. 그러나 내가 알아야 할 것은 malloc을 사용하여이 모든 구조체를 간단하게 초기화하는 것이다. – Felipe
이 경우,'--track-origins = yes'는 고쳐야 할 소스 코드 위치를 가리켜 야합니다. 그렇지 않은 경우 valgrind 오류와 해당 소스 코드를 게시해야합니다. –