특정 배열에 대해 복제본을 만드는 기능이 있습니다. 내 코드에 대한 구조체입니다 : 내가 쓴C에서 memcpy 후에 어설 션이 실패했습니다
typedef struct {
int* data;
unsigned int len;
} intarr_t;
기능은 다음과 같습니다 나는 기능을 시험 할 때
intarr_t* intarr_copy(const intarr_t* ia)
{
unsigned int len;
intarr_t* newia = malloc(sizeof(intarr_t));
assert (newia);
newia->data = malloc(sizeof(int)*len);
newia->len = len;
if (newia == 0)
{
return NULL;
}
else
{
memcpy (newia->data, ia->data, len*sizeof(int));
}
return 0;
}
, 그것은 내 기능을 중지 및 IA에 대한 내 주장이 실패했음을 밝혔다. 내가 ia를 가지고있는 유일한 곳은 memcpy이다. 그러나 나는 내 기능에 단언조차하지 않았다. 아무도 내가 왜 단언 오류를 준지 알 수 있습니까? 당신이 충돌을 볼 수 있도록 len
의 값이 결정되지이 라인에서
memcpy (newia->data, ia->data, len*sizeof(int));
: 때문에
이유는 'len' 변수를 결코 값으로 초기화 할 수 없다는 것입니다. 'unsigned int len = ia-> len; –
len이 초기화되지 않았다는 것을 의미 할 가능성이 큽니다. 또한 코드를 일관되게 유지하고 혼합하지 않도록하십시오. 'NULL','0'과 같은 것을 의미합니다. 또 다른 것은'newia'가 적절하게 할당되었는지 나중에 if 문으로 검사하는지 당신이 주장하는 것입니다. ... –
'서명되지 않은 int len = ia-> len;'및 intXXX_t는 시스템 예약 된 이름입니다. – BLUEPIXY