我在 memcpy 抛出段错误时遇到了一些麻烦,而且我似乎无法找到错误的来源。
typedef struct {
int record_code;
char* record_name;
char buffer[6004];
} record;
record* rec;
char* ptr = rec->buffer;
//--DEBUG
printf("ADDR OF PTR: %p\n", ptr);
printf("SIZE OF BUFFER: %d\n", sizeof(ptr->buffer));
//--End DEBUG
create_record(ptr);
我想在缓冲区中添加一个 int 值,但我在这一行收到 SEGFAULT
memcpy(ptr, &key, sizeof(key));
在这个函数中
int counter = 0;
int create_record(char* ptr) {
int key = counter;
//--DEBUG
printf("ADDR OF PTR: %p\n", ptr);
printf("SIZE OF KEY: %d\n", sizeof(key));
//--End DEBUG
memcpy(ptr, &key, sizeof(key));
ptr += sizeof(key);
int integer = rand_int();
memcpy(ptr, &integer, sizeof(integer));
ptr += sizeof(integer);
char* word = rand_string();
memcpy(ptr, word, strlen(word));
ptr += strlen(word);
counter++;
}
我认为 memcpy 抛出段错误的唯一原因是,如果指针是垃圾,或者我试图扔进内存位置的东西的大小大于我分配的内存。但我只是试图将一个整数(大小 = 4 字节)放入分配为 6004 字节的缓冲区中,因此它似乎不是大小问题...并且我所拥有的指针的地址与它的地址相匹配最初创建时就已经存在了(我不确定这是否真的很重要......)。
我从打印中得到的输出是这些
ADDR OF PTR: 0x10
SIZE OF BUFFER: 64004
(now inside create_record)
ADDR OF PTR: 0x10
SIZE OF KEY: 4
谁能告诉我哪里出错了?
提前致谢
最佳答案
rec
不指向任何分配的内存。取消引用它会产生未定义的行为。已经上线了
char* ptr = rec->buffer;
结果未定义。
不用指针,只需定义
record rec;
并像这样初始化ptr
char* ptr = rec.buffer;
关于c - 不太确定,memcpy 上有段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266998/