我编写了一个函数来读取包含所用硬件细节的缓冲区。现在缓冲区的大小取决于硬件。有没有什么方法可以在读取缓冲区之前检查缓冲区的大小,以便我不访问任何非法位置并避免分段错误?或者在阅读任何位置之前,是否可以查看我是否正在访问有效位置?
答案 0 :(得分:0)
Methode 1 :
如果您不知道缓冲区大小,请首先询问每次缓冲区的大小。然后使用malloc
分配大小。使用它后free
。
Methode 2 : 至少你知道最大尺寸需要多少。静态分配MAX_BUFF_SIZE。
如果您不喜欢上述两个程序,请执行以下操作。
Methode 3 : 发件人知道他发送了多少大小。修复有限大小以便一次传输,并逐个发送。
Eg: Fixed transfer size = 10bytes. //both sender and receiver have an idea
message size to send = 50bytes. //sender have idea but receiver don't know.
struct my_struct {
int transaction_no;
char buf[SIZE];
int total_messages;
int current_message_no;
};
所以发送者将他的数据分成5个数据包(每个10个字节)。逐个发送每个数据包。
所以接收方检查传入的数据包并再次重建数据。
我认为前两种方法比这更好。