从指针读取一个容器结构

Reading a cubin structure from a pointer

本文关键字:一个 结构 指针 读取      更新时间:2023-10-16

我正在尝试阅读一个c++结构(在windows中)的内容,它具有以下格式

typedef struct __cudaFatCudaBinaryRec {
    unsigned long            magic;
    unsigned long            version;
    unsigned long            gpuInfoVersion;
    char*                   key;
    char*                   ident;
    char*                   usageMode;
    __cudaFatPtxEntry             *ptx;
    __cudaFatCubinEntry           *cubin;
    __cudaFatDebugEntry           *debug;
    void*                  debugInfo;
    unsigned int                   flags;
    __cudaFatSymbol               *exported;
    __cudaFatSymbol               *imported;
    struct __cudaFatCudaBinaryRec *dependends;
    unsigned int                   characteristic;
    __cudaFatElfEntry             *elf;
} __cudaFatCudaBinary;

我有一个指针指向这个结构体(void *ptr)

现在我想读取这个结构的内容。

__cudaFatCudaBinary *ptr2=(cudaFatCudaBinary*)ptr;
cout<<ptr->magic;//This works fine
cout<<ptr->key;//This crashes my program..bad pointer results..why?
上面的

对所有非指针和指针成员都是一致的。我做错了什么?

补充道:

好的,让我详细说明这个问题。是的,"key"指向的地址是NULL,所以它是所有指针成员。但我确定这个结构有有效的数据。它被驱动函数用来生成句柄,并且执行得很好。所有我需要的是复制整个图像的结构,并将其存储在一个文本文件。我该怎么做呢?为什么有些成员字段是空的?我在想一种蛮力的方法来找到结构的地址限制。但是当阅读时,这些值本身似乎是无效的,我不知道如何去做!

添加2

结构

的内存转储

谢谢!

cout << ptr->key将打印一个以0结尾的字符串,无论key指向什么,而不是指针本身。如果key为NULL或无效,则这将是未定义的行为。(在本例中为"crash")

如果你只是想打印指针本身,确保你打印它作为一个void*指针:

cout << static_cast<void*>(ptr->key);

从CUDA 4.0开始,这个结构体的格式发生了巨大的变化。magic的值现在不同了,gpuInfoVersion现在是指向包含实际数据的结构体的指针。要了解更多信息,您可能需要阅读此线程

相关文章: