여기에 Uni 지정 작업을하고 있는데 문제가 생겼습니다. for-loop를 사용하여 구조체 내부의 한 지점에 문자열 입력을 저장하려고합니다. 나중에 문자열을 가져 오기 위해 데이터가 저장된 장소에 대한 포인터를 사용하려고합니다. 이제 문제는 내가 for 루프 안에 들어가서 점의 주소도 변경된다는 것입니다. 이 코드 :할당없이 포인터 주소가 변경됨
B: 0x7fc111803200
A: 0x7fc111803265
B 전 값과 사후 복사된다 값 :
printf("B: %p\n", txt->point);
for(i = 0; i < input_sz; i++)
{
txt->point[i] = input[i];
}
printf("A: %p\n", txt->point);
출력을 제공한다.
도움이되는 디버깅에 도움이 될 것입니다.
편집 :
가구조체 :
struct text_storage {
char* start;
char* point;
char* end;
} typedef text_t;
초기화 기능 :
가text_t* text_init(void *memory, size_t size)
{
text_t* to_return;
if(size < sizeof(text_t))
{
return NULL;
}
to_return = (text_t*) memory;
to_return->start = to_return;
to_return->end = to_return->start + size;
to_return->point = to_return->start;
printf("Start: %p, point: %p, end: %p, end-start: %d\n", to_return->start, to_return->point, to_return->end, (to_return->end - to_return->start));
return to_return;
}
텍스트 저장 방법이되는 에러가 발생 몇 가지 이상의 코드의
int text_store_entry(text_t *txt, const char *input, size_t input_sz)
{
int to_return;
char* begin = txt->point;
int i;
if(input_sz > (txt->end - txt->point))
{
return -1;
}
printf("Start: %p, point: %p, end: %p, end-start: %d\n", txt->start, txt->point, txt->end, (txt->end - txt->start));
printf("B: %p\n", txt->point);
for(i = 0; i < input_sz; i++)
{
txt->point[i] = input[i];
}
printf("A: %p\n", txt->point);
}
홈페이지 기능 (테스트 목적으로 만 해당) :
int main(int argc, char* argv[])
{
void* memory = malloc(10000);
char* a = "hei pa deg din trekkbasun";
text_t* txt;
int memoverwritten;
txt = text_init(memory, 10000);
memoverwritten = text_store_entry(txt, a, (size_t)26);
printf("got through\n");
return 0;
}
선언 및 기타 코드를 표시하십시오. - 아마 정의되지 않은 동작 –
더 많은 코드가 추가되었습니다. 감사합니다 @ GrijeshChauhan –
하지만'text_store_entry()'함수를 어디에서 호출 할 수 있습니까? –