从指针读取一个容器结构
Reading a cubin structure from a pointer
我正在尝试阅读一个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
现在是指向包含实际数据的结构体的指针。要了解更多信息,您可能需要阅读此线程
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- std::transform 将一个结构数组复制到另一个结构数组
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 如何在级别上打印树,给定一个结构,该结构保存节点的值及其父节点的值,对于树中的每个节点
- 创建一个结构的关联数组,以创建一个缓冲区,供键快速访问
- 如何在另一个结构中初始化结构数组?
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 我想重置一个C++结构统计,我可以以某种方式使用 stat() 语法吗?
- C++可以输出一个结构的内存地址吗
- 通过 C++ 中的另一个结构成员访问结构
- C++ push_back() 一个结构体到一个向量中
- 难以从另一个结构中的函数返回结构
- 如何将向量添加到结构中以创建一个库存系统,在该系统中,我可以仅使用一个结构向系统添加多种不同的葡萄酒
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 将一个结构的值复制到另一个结构
- 是否可以在同一未创建的结构内创建一个结构