如何知道memcpy()函数在完成餐具期间已成功复制了内存
How to know the memcpy() function has successfully copied the memory during completing pakage?
我通过TCP/IP SSH隧道将包含120000的向量发送到服务器。每次,我都会发送250个型号的值,并将其发送给我,以确保我正确发送了数据。我使用读取((函数来收到服务器中的数据。如我们所知,Read((不能始终一次收到所有250个值(250*8 = 2000 bytes(。因此,我使用函数memcpy((保存收到的数据,直到达到2000字节。但是,memcpy只能工作一次。
例如,我发送250个值(2000 bytes(。服务器第一次收回1408字节。我使用memcpy((将这1406个字节保存到缓冲区的数组中。服务器在第二次回收594个字节。我使用memcpy((将这592个字节保存到缓冲区的同一数组中。但是,我发现第二次是memcpy((无法根据从服务器发送回我的计算机的值来工作。
服务器中的代码C 有两个目标:1.每次收到250个数据。2.每次将它们发送回去。
#include <stdio.h>
#include <iostream>
#include<vector>
#include <math.h>
extern "C"
void useCUDA();
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
int main()
{
vector<double> Y;
int lread = 250, nMu = 4, ltotal = 120000;
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(54321);
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
double* block_buffer_input;
block_buffer_input = new double[lread];
double* block_input;
block_input = new double[lread];
double* block_buffer_output;
block_buffer_output = new double[lread];
while (Y.size() < ltotal)
{
int nbyteread = 0;
int nbytereadtimes = 0;
while (nbyteread < 8 * lread)
{
nbytereadtimes = read(sock, reinterpret_cast<char*>(block_buffer_input), lread * sizeof(double));
memcpy(block_input + nbyteread, block_buffer_input, nbytereadtimes);
if (nbytereadtimes != 8 * lread && nbytereadtimes != 0)
cout << Y.size() << ": " << nbytereadtimes << " " << block_input + nbyteread <<endl;
nbyteread += nbytereadtimes;
}
Y.insert(Y.end(), &block_input[0], &block_input[lread]);
cout << Y.size() << ": " << nbyteread << endl;
int Sp = Y.size() - lread;
for (int i = 0; i != lread; ++i)
{
block_buffer_output[i] = Y[Sp + i];
}
write(sock, (char*)block_buffer_output, lread * sizeof(double));
}
delete[] block_buffer_input;
delete[] block_input;
delete[] block_buffer_output;
close(sock);
return 0;
}
我想知道为什么memcpy((在第二次不工作。
如果将nbyteread添加到指针中,您实际上是指nbyteread * sizeof(double((double(的地址(nbyteread element的地址(
>memcpy(block_input + nbyteread, block_buffer_input, nbytereadtimes);
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- cmake在我的项目中所需的所有静态库都不成功
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- 如何检查C++智能指针内存分配是否成功?
- 如何知道memcpy()函数在完成餐具期间已成功复制了内存
- 咖啡错误 == cuda成功(77 与 0)遇到非法内存访问
- 将大型Malloc阵列数据成功分配到内存后丢失
- 如果引用必须指向有效内存,那么为什么这个程序编译成功