小编Rub*_*ben的帖子

两个printfs以不同方式打印相同的字符串

我正在尝试创建一个处理大整数运算的库.大整数存储在结构中:

typedef struct BigInt BigInt;
struct BigInt
{
    uint32_t size;
    uint32_t *data;
};
Run Code Online (Sandbox Code Playgroud)

第一个成员是包含数字长度的uint32_t,第二个成员是指向实际数字数据的指针(存储在二进制补码中).我编写了一个简单的toHex(BigInt*a)函数来分配内存,将大整数的十六进制值打印到字符串中,然后返回地址.

在我的主循环中,我有以下内容:

int main(int argc, char *argv[])
{
    char *ap, *bp;
    BigInt *a = fromUInt32(0x7fffffff), *b = fromUInt32(1), *c = fromUInt32(0x80000000);
    _add(a, b);
    ap = toHex(a);
    bp = toHex(c);
    printf("%s\n", ap);
    printf("%s\n%s\n", ap, bp);
    printf("%s\n%s\n", ap, bp);
    free(ap);
    free(bp);
    deleteBigInt(a);
    deleteBigInt(b);
    deleteBigInt(c);
}
Run Code Online (Sandbox Code Playgroud)

好奇的是,打印出来的

0000000080000000
0
0000000080000000
0000000080000000
0000000080000000
Run Code Online (Sandbox Code Playgroud)

因此,第二个printf语句打印的内容与第一个和第三个printf语句不同.似乎第一个printf语句是正确的,第二个是搞乱的.我已经使用GDB逐步完成了代码,在评估了toHex之后,ap指向字符串"0000000080000000",由空指针终止.

我完全不知所措.据我所知,可能性是:
1.由于一些奇怪的原因,我遇到了未定义的行为.
2.在_add中我调用用x86汇编代码编写的例程,其中可能存在错误(但我通过保留esi,edi,ebx,ebp和esp来遵守GCC的调用约定).
3. printf中有一个错误,似乎不太可能.

此外,由于没有释放toHex分配的内存,我有一个明显的"内存泄漏"(引用因为对内存泄漏的看法似乎有所不同),但这并不重要.

我的toHex功能是Sourav Ghosh要求的,如下:

char numToHex[] = { '0', '1', '2', '3', '4', …
Run Code Online (Sandbox Code Playgroud)

c linux gcc pointers i386

7
推荐指数
2
解决办法
277
查看次数

如何实现我自己的锁定机制

对于一个赋值(如果你想知道它是并发的) - 我必须实现自己的锁

(更具体:TaS,TTas和Array-Lock,如"多处理器编程的艺术"中所述)

我尝试过一些在线测试输入和输出方案(太糟糕了,他们需要很长时间才能尝试).

您的程序将计算通过特定测试的9位数字

(它在荷兰语中称为elfproef,我不知道英语对等,对不起).

有时我的号码略有不同,这表明我的锁不能100%正常工作.

我已经实现了这样的锁:

interface Lock
{
    void Lock();
    void Unlock();
}

class TaSLock : Lock
{
    AtomicBool state = new AtomicBool(false);

    void Lock.Lock()
    { while (state.getAndSet(true)); }

    void Lock.Unlock()
    { state.getAndSet(false); }
}
Run Code Online (Sandbox Code Playgroud)

AtomicBool与一个实现integer,因为Interlocked类不具备操作Boolean变量.这在内存使用方面不是最佳的,但它不会(或不应该)对速度有影响.

class AtomicBool
{
    int value;
    static int True = 1, False = -1;

    public AtomicBool(bool value)
    {
        if (value) this.value = True;
        else this.value = False;
    }

    public void set(bool …
Run Code Online (Sandbox Code Playgroud)

.net c# concurrency locking

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

多种数据类型的对象

我需要为学校作业实施一个国际象棋游戏,你必须创建一个适用于同一板上其他游戏的界面.所以,你必须实现国际象棋棋子,但也需要其他游戏的棋子.

我试着这样做:

data ChessPiece = King | Queen | Knight | Rook | Bishop | Pawn deriving (Enum, Eq, Show)
data Piece = ChessPiece | OtherGamePiece deriving (Enum, Eq, Show)
data ColoredPiece = White Piece | Black Piece
data Board = Board { boardData :: (Array Pos (Maybe ColoredPiece)) }
Run Code Online (Sandbox Code Playgroud)

然后我尝试加载国际象棋游戏的开头:

beginBoard = Board (listArray (Pos 0 0, Pos 7 7) (pieces White ++ pawns White ++ space ++ pawns Black ++ pieces Black)) where
    pieces :: (Piece -> ColoredPiece) …
Run Code Online (Sandbox Code Playgroud)

constructor haskell types object

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

Arduino没有得到认可

我不确定这是问的正确地方,但是我已经在stackoverflow上看到了其他Arduino线程,所以我认为这没问题。

我的arduino不兼容的主板未得到认可。我在Windows 8和Windows XP上尝试过。当我打开设备管理器时,“端口(COM和LPT)”部分下只有一个名为“ USB串行端口”的条目。但是,Arduino在连接时不会闪烁。

我尝试卸载USB串行端口驱动程序或对其进行更新,但两者均无效:这些驱动程序似乎是最新的,当我卸载并重新连接arduino时,它们再次出现。

当我尝试上传程序时,我得到

avrdude: stk500_getsync(): not in sync: resp=0x00
Run Code Online (Sandbox Code Playgroud)

要么

avrdude: usbdev_open(): did not find any USB device "usb"
Run Code Online (Sandbox Code Playgroud)

(当我使用“使用编程器上传”时)。

我希望任何人都可以帮助我,我已经尝试了很长时间了。

设备管理器的屏幕快照,连接了Arduino Uno兼容板并闪烁

编辑2:我在父母的装有Windows Vista的计算机上尝试了相同的操作。在那里,该板被识别为“未知设备”下的USB串行端口(首先,我认为这是一个包含两个大写字母然后四个数字的代码,但我不确定,我无法得到该代码)重命名,即使卸载驱动程序也是如此。

arduino arduino-uno

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

为什么这个美元符号构造不起作用?

是的,另一个美元符号问题.对不起......(我使用了搜索功能!)

我的课程功能编程教授告诉我们,美元符号'有点添加一个开头括号,然后在结尾添加一个'(这里大致粗略地描述的方式大致相同).所以

fibs = 0 : 1 : zipWith (+) fibs $ tail fibs
Run Code Online (Sandbox Code Playgroud)

应该相当于

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

嗯,事实并非如此.第二件事编译得很好,第一件事就是错误:

jkjj.hs:1:8:
    Couldn't match expected type `[a1] -> [a1]' with actual type `[a0]'
    The first argument of ($) takes one argument,
    but its type `[a0]' has none
    In the expression: 0 : 1 : zipWith (+) fibs $ tail fibs
    In an equation for `fibs':
        fibs = 0 : 1 : zipWith …
Run Code Online (Sandbox Code Playgroud)

haskell dollar-sign

3
推荐指数
2
解决办法
550
查看次数

结构的"这个"?

一个简短的,也许是愚蠢的问题.对于类和结构,有时我喜欢使用与构造函数参数同名的成员变量.例如:

class Vector3
{
    float x, y, z;

    public Vector3(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我也想为结构做这个,但你不能在结构构造函数中使用'this'(我认为它们的使用是为类保留的).有没有办法做到这一点,还是我应该给我的论点另一个名字?

c++ constructor struct this

0
推荐指数
2
解决办法
151
查看次数

sizeof char数组减一

我想使用sizeof函数来获取char数组的大小。我得到的尺寸太大了。例:

#include <stdio.h>

char text[] = "hey";
const int n = sizeof(text);

int main(int argc, char *argv[])
{
    printf("%i\n", n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出4,而不是预期的3。我在各种在线c ++编译器上重现了此行为,所以我认为这是有目的的(奇怪的是,我在Internet上找不到任何东西)。我在网上可以找到的大多数资源都说应该为3 * sizeof(char)(在大多数普通系统上为3)。

如果我正确理解了所有内容,那么将以某种方式将多余的字节用于数组表示。为什么会这样?

c++ arrays sizeof

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