将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中
Problem pushing char* to vector, but after each iteration its adding a pointer to the same values buffer into the vector
[已解决] 我将 char 变量更改为std::string
数组,在那里我将浮点变量推送到数组中。完成所有这些之后,您可以将std::string
转换为const char*
我正在使客户端到服务器。我想将数据发送到服务器,但是当我运行此代码时,我得到了两次 4.5 而不是 180 和 4.5。我正在使用字符,因为我使用的发送函数仅支持字符。
清空字符(不起作用) 在 if 语句结束之前打印值(这表明该值是正确的),但是当 for 循环第二次循环时,它是 4.5 而不是 180。
float an = 180;
float dis = 4.5;
for (int i = 0; i < 1; i++) {
set.measurements.push_back(an);
set.measurements.push_back(dis);
}
for (int i = 0; i < set.measurements.size(); i++){
sprintf(values, "%0.1f", set.measurements[i]);
if (i == 1 && i != 0){
std::cout << "{ 4.5 }" << 'n'; // expected output
char *dist = new char[10];
dist = values; // <-- Value is 4.5
meas.push_back(dist);
// This is 4.5 but the angle doesn't stay 180
delete dist;
}
if (i == 0 && i != 1){
std::cout << "{ 180 }" << 'n'; // Expected output
char *ang = new char[10];
ang = values; // <-- Value is 180 here
meas.push_back(ang);
delete ang;
}
}
for (int i = 0; i < 2; i++) {
std::cout << &*meas[0] << 'n';
}
我预计输出是180和4.5,但实际输出是4.5和4.5
。char *dist = new char[10];
这将分配一个新的char
数组,并将dist
设置为指向它。
dist = values; // <-- Value is 4.5
下一行立即替换指向new
-ed 缓冲区的dist
指针,从而泄漏此内存。现在,这会将dist
设置为指向其他缓冲区(大概)。
meas.push_back(dist);
现在,这会将指向values
对象的指针添加到矢量中。因此,循环的每次迭代最终都会将指向同一values
缓冲区的指针添加到向量中,这就是您最终看到的。
delete dist;
这仍然指向values
.从上下文来看,values
最初不太可能是用new
创建的,即使是这样,循环的每次迭代最终也会delete
相同的指针。无论哪种方式,这都是未定义的行为,并且通过足够的循环,整个程序可能会崩溃。
第二个if
语句重复了上述所有错误。
由于您的意图显然是编写C++代码,因此您实际上应该使用C++库,即格式化的输出运算符和std::string
,这将为您正确分配和管理所有内存,从而消除这些常见的逻辑错误。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- C++字符*缓冲区的大小
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 如何将更多文件夹添加到c++include路径
- ostream过载时的缓冲区冲洗
- 输出操纵器 std::ends 是否向输出缓冲区添加空字符?
- 将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中
- C++-缓冲区组合添加额外的空值
- 如何将对象添加到缓冲区?彭格尔
- 如何将 OpenCV 轮廓平滑添加到现有缓冲区
- 为什么在此方法中添加cout行可以阻止我的程序在Windows中触发缓冲区溢出异常?
- 如何添加read_some缓冲区
- 如何添加字符缓冲区的STD字符串放置在结构体
- C++将LPSTR缓冲区添加到char数组