c - 不太确定,memcpy 上有段错误吗?

标签 c pointers memory segmentation-fault memcpy

我在 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/

相关文章:

二维数组上下文中的 C 指针

c++ - ** 和 * [] 一样吗?

iPhone内存测试

java - 使用反射代替长 switch 语句

c - 用 C 为微 Controller 编写应用程序

c - C 中的时间函数?

c - 如何将 4x5 矩阵中的行左移 2 个元素

c - 将指针/数组从函数传递给 main()

c - 何时为 C 中的结构和 "create"函数分配内存

c++ - 如何一起使用c和c++