c - 如何在C中创建指向嵌套对象的指针?

标签 c pointers object

我有一个函数,可以调用函数 setBoolChannels:

int parseLayerFile(WRAPPER_t * w, char*filename){
setBoolChannels(w->layer_files[file_no].command_orders[tmpi]);
}

parseArgs 从 main 调用: parseArgs(w, argc, argv);

如何在函数parseLayerFile中访问对象w->layer_files[file_no].command_orders[tmpi]来访问其成员进行更新?该函数目前是空的,但我无法访问获取对象。

void setBoolChannels(LAYER_COMMAND_ORDER_t * cmd, char * token, uint32_t n){
cmd; // here I got cmd (LAYER_COMMAND_ORDER_t *) 0x7
}

无法访问地址 0x7 处的内存...

我可以访问整个 WRAPPER_t 对象,但我很好奇是否可以访问嵌套对象(以创建指向它的指针)。

以下是我使用的类型:

typedef struct LAYER_COMMAND_ORDER_
{
  uint16_t * id;
} LAYER_COMMAND_ORDER_t;

typedef struct LAYER_FILE_
{
  LAYER_COMMAND_ORDER_t * command_orders;
} LAYER_FILE_t;


typedef struct WRAPPER_
{
    LAYER_FILE_t * layer_files;
} WRAPPER_t;

最佳答案

根据 parseLayerFile()setBoolChannels() 的给定定义,编译器应该提示参数不兼容,因为 parseLayerFile 尝试传递结构体其中 setBoolChannels 需要一个指针。指针将像这样传递:

int parseLayerFile(WRAPPER_t * w, char*filename){
   setBoolChannels(&w->layer_files[file_no].command_orders[tmpi]);
}

据说仍然会产生相同的错误消息:

Cannot access memory at address 0x7 ...

地址 0x7 只是距地址 0x0 的一个小偏移量。这可能意味着您正在使用指向某些结构或数组的空指针,并尝试访问结构/数组中的字段。

在您的情况下,这可能意味着 w->layer_files[file_no].command_ordersw->layer_filesNULL 或以其他方式未初始化.

关于c - 如何在C中创建指向嵌套对象的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792145/

相关文章:

c++ - 什么时候应该在 C++ 中使用引用?

Java - 在没有方法的情况下编辑实例变量

c++ - 使用 C++ 库的 Swift 中的 takeRetainedValue() 或 takeUnretainedValue()

c - c89 标准要求实现提供哪些硬件特定定义?

指针索引运算符的混淆

c - 自引用结构声明

java - 为什么这个对象数组中的每个元素都会被最后一个对象覆盖?

java - 理解数组中对象的概念

c++ - 检测对范围外变量的访问

c 指针到指针如何迭代它