访问返回的指针时出现分段错误

时间:2019-10-12 15:02:54

标签: c pointers struct segmentation-fault

我有一个包含数据大小和数据本身的数据结构,并且我还有两个函数对相同的结构进行反序列化。

请注意,这些序列化功能并不完全实用或有效。

我的import os os.environ["CUDA_VISIBLE_DEVICES"] = "1" 结构:

data_t

我的函数struct data_t { int datasize; void *data; }; 将结构转换为缓冲区:

data_To_buffer

我的函数int data_to_buffer(struct data_t *data, char **data_buf) { if (data == NULL || data_buf == NULL) return -1; int buf_size = INT_S + data -> datasize; *data_buf = malloc(buf_size); char *buf_ptr = *data_buf; int int_v = htonl(data -> datasize); memcpy(buf_ptr, &int_v, INT_S); buf_ptr += INT_S; memcpy(buf_ptr, data -> data, data -> datasize); return buf_size; } 将缓冲区转换为data_t对象。

buffer_to_data

问题

在我测试这些功能的struct data_t *buffer_to_data(char *data_buf, int data_buf_size) { if(data_buf == NULL || data_buf_size <= 0) return NULL; int size = ntohl(* (int *) data_buf); data_buf += INT_S; struct data_t *data = data_create(size); memcpy(data -> data, data_buf, data -> datasize); printf("\n SIZE: %d", data -> datasize); <- OK = 14 printf("\n Data: %s\n", data -> data); <- OK = 1234567890abc return data; } 上,尝试打印反序列化数据的值时出现错误。

请注意,当我在main函数中打印datadatasize时,根本没有问题,只有在我返回数据后才会发生错误。

buffer_to_data

1 个答案:

答案 0 :(得分:0)

这里:

memcpy(buf_ptr, &int_v, INT_S);

您缺少对内部缓冲区的取消引用,而是覆盖了传递的指针

固定线路:

memcpy(*buf_ptr, &int_v, INT_S);

这里有同样的错误:

buf_ptr += INT_S;
memcpy(buf_ptr, data -> data, data -> datasize);

固定的变体形式:

memcpy(*buf_ptr + INT_S, data -> data, data -> datasize);