小编Pau*_*erg的帖子

在std :: filesystem :: path追加上的c ++ std :: bad_alloc

我遇到一个非常奇怪的行为,我将其提炼为一个非常基本的测试:

#include <string>
#include <filesystem>

int main(void)
{
  const std::string name = "foo";
  const std::filesystem::path lock_dir = "/tmp";
  std::filesystem::path lockfile = lock_dir / name;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用编译g++ -std=c++17 -Wall -Wextra -Werror -g foo.cpp -o foo。当我运行它时,在添加两个路径的那一行上,我得到了一个std :: bad_alloc异常。这是我在gdb中看到的

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ffff742c801 in __GI_abort () at abort.c:79
#2  0x00007ffff7a8e1f2 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff7a99e36 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff7a99e81 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff7a9a0b5 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 …
Run Code Online (Sandbox Code Playgroud)

c++ gdb exception libstdc++ c++17

8
推荐指数
1
解决办法
336
查看次数

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

我需要将浮点数截断为最接近的 10 次方。例如,1.1 将截断为 1.0,4.7e3 将截断为 1e3。我目前正在做看似复杂的事情powf(10,floorf(log10f(x)))。我想知道是否有更好的性能(如更快的执行速度)解决方案?我的目标CPU架构是x86-64和arm64。

#include <stdio.h>
#include <math.h>

int main()
{
  float x = 1.1e5f;
  while (x > 1e-6f)
  {
    float y = powf(10,floorf(log10f(x)));
    printf("%e ==> %g\n", x, y); 
    x /= 5.0f;
  }
}
Run Code Online (Sandbox Code Playgroud)

运行时,这会产生

1.100000e+05 ==> 100000
2.200000e+04 ==> 10000
4.400000e+03 ==> 1000
8.800000e+02 ==> 100
1.760000e+02 ==> 100
3.520000e+01 ==> 10
7.040000e+00 ==> 1
1.408000e+00 ==> 1
2.816000e-01 ==> 0.1
5.632000e-02 ==> 0.01
1.126400e-02 ==> 0.01
2.252800e-03 ==> 0.001
4.505600e-04 ==> 0.0001
9.011199e-05 …
Run Code Online (Sandbox Code Playgroud)

c c++ floating-point x86-64 arm64

7
推荐指数
1
解决办法
233
查看次数

平台独立的Qt5方式获取开放的TCP端口

在Qt中是否有一种独立于平台的方式来获取未使用的TCP端口?我需要启动一个现有的应用程序,必须给它一个开放的TCP端口才能使它工作.

port qt tcp cross-platform qt5

4
推荐指数
1
解决办法
1114
查看次数

有没有办法在 Bash 中字符串化 JSON

我知道jq可以使用序列化的 JSON 字符串来格式化/过滤/修改内容。但是,据我所知,输出始终是人类可读的 JSON 形式。Bash 或其本身有没有办法jq对输出进行字符串化?

例如,给定

echo '{"foo" : "bar"}' | jq -r .
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个输出"{\"foo\" : \"bar\"}"

bash json jq

4
推荐指数
2
解决办法
6250
查看次数

为什么 Rust 需要简单枚举的复制和克隆特征

除非在枚举中派生出特征,Copy否则以下代码将无法编译。Clone鉴于枚举基本上是 ani8并且根据文档,整数自动实现 Copy 特征,为什么这是一个要求?与此相关的是,由于 的大小MyEnum在编译时应该是众所周知的,所以它不应该进入堆栈吗?这个特性不是Clone意味着它会在堆上吗?

#[derive(Debug, Copy, Clone)]
#[repr(i8)]
enum MyEnum {
    Some1,
}

fn main() {
    let x = MyEnum::Some1;
    let y = x;
    println!("x={:?} y={:?}", x, y);
}
Run Code Online (Sandbox Code Playgroud)

enums rust

3
推荐指数
1
解决办法
1896
查看次数

带有数组的结构的 C# 编组

假设我有一个类似于

public struct MyStruct
{
    public float[] a;
}
Run Code Online (Sandbox Code Playgroud)

并且我想用一些自定义数组大小实例化一个这样的结构(在这个例子中假设为 2)。然后我将它编组到一个字节数组中。

MyStruct s = new MyStruct();
s.a = new float[2];
s.a[0] = 1.0f;
s.a[1] = 2.0f;

byte[] buffer = new byte[Marshal.SizeOf(typeof(MyStruct))];
GCHandle gcHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);

try
{
    Marshal.StructureToPtr(s, gcHandle.AddrOfPinnedObject(), false);

    for (int i = 0; i < buffer.Length; i++)
    {
        System.Console.WriteLine(buffer[i].ToString("x2"));
    }
}
finally
{
    gcHandle.Free();
}
Run Code Online (Sandbox Code Playgroud)

这在我的 byte[] 中只给了我 4 个字节,它们看起来像一个指针值,而不是 1.0f 或 2.0f 的值。我已经四处寻找使这项工作起作用的方法,但到目前为止我能找到的都是类似的例子,其中结构数组的大小是提前知道的。没有办法做到这一点吗?

c# arrays struct runtime marshalling

2
推荐指数
1
解决办法
4268
查看次数

AWS boto3 create_policy() - 指定policyDocument

我正在使用 python 的 boto3 库来连接 AWS IoT。我想使用create_policy() API创建策略,但我不明白policyDocument字段要使用什么。我认为它与policyStatement有关,但我无法弄清楚语法。这是我到目前为止所拥有的。

from __future__ import print_function
import os
import sys
import boto3
from botocore.exceptions import ClientError
from colorama import Fore, Back, Style
from colorama import init
init()

thingType = 'TpmStation'
thingBaseName = thingType + '-'
thingPolicy = thingType + '-Policy-GenDerivedKey'

def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)

try:
    # Use system hosted credentials - see
    # http://docs.aws.amazon.com/cli/latest/userguide/installing.html
    # http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
    client = boto3.client('iot')

    policyDocument = {}
    policyDocument['Statement'] = []
    policyDocument['Statement'].append({}) …
Run Code Online (Sandbox Code Playgroud)

python policy amazon-web-services iot boto3

1
推荐指数
1
解决办法
2219
查看次数