Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 奇怪的代码行为?_C_Arrays_Data Structures_Pointers - Fatal编程技术网

C 奇怪的代码行为?

C 奇怪的代码行为?,c,arrays,data-structures,pointers,C,Arrays,Data Structures,Pointers,我有一个C代码,其中有一个结构声明,其中声明了int[576]数组 出于某种原因,我不得不从结构中删除这个数组,所以我用一个指针int*ptr替换了这个数组;在代码中的其他地方声明了一些相同类型的全局数组,并通过将全局数组分配给该指针来初始化该指针。因此,我不必从代码的其他部分更改访问此数组的方式 但是,当我在结构中声明数组时,它工作正常/提供所需的输出,但当我在结构中声明它为指针并将全局数组分配给该指针时,作为指针初始化的一部分,它提供垃圾输出 所有这些代码都在MS-VC 6.0/Window

我有一个C代码,其中有一个结构声明,其中声明了int[576]数组

出于某种原因,我不得不从结构中删除这个数组,所以我用一个指针int*ptr替换了这个数组;在代码中的其他地方声明了一些相同类型的全局数组,并通过将全局数组分配给该指针来初始化该指针。因此,我不必从代码的其他部分更改访问此数组的方式

但是,当我在结构中声明数组时,它工作正常/提供所需的输出,但当我在结构中声明它为指针并将全局数组分配给该指针时,作为指针初始化的一部分,它提供垃圾输出

所有这些代码都在MS-VC 6.0/Windows setup/Intel-x86上运行

我试过以下方法:

  • 怀疑结构填充/对齐,但无法获得任何线索?如果结构对齐可能是一个罪魁祸首,我如何着手缩小范围并确认它

  • 我已经确保在这两种情况下,数组都被初始化为一些默认值,比如说在第一次使用之前为0,在初始化之前没有使用它

  • 我尝试为这个新声明的数组使用全局数组和基于malloc的内存。同样的结果,垃圾输出


  • 我怎样才能集中精力解决这个问题?任何指针都会有帮助。

    尝试(清理和)重建项目时,可能现有的对象文件仍在访问数组元素,就好像它没有在堆上分配一样,这会导致问题。

    是否可能在结构字段的任何位置使用sizeof<代码>sizeof(int[576])!=sizeof(int*)


    这应该是两者之间唯一可见的区别。

    您说您不必更改访问此阵列的方式。但有些操作对数组和指针的结果不同。一个是前面提到的sizeof(struct.arr)与sizeof(struct.ptr),另一个是&struct.arr与&struct.ptr。您是否检查了对该阵列的任何单一访问,并将这些差异考虑在内?

    根据您对该阵列所做的操作以及您对它的期望,新代码的功能可能与旧代码的功能完全相同,也可能完全不同。如果你没有看到你在做什么,就无法说出发生了什么。这是什么垃圾输出?您是否尝试过将数组初始化为相同的保护值(与零不同?)尽管我使用sizeof(结构)为该结构分配内存,但出于调试目的,我还尝试过将数组保持在结构中,然后在该结构中声明另一个指针,然后使该指针指向该数组。所以基本上是为了确保sizeof没有出错。结果还是一样,输出不好。@EFraim:谢谢。我的代码中有一些错误。请尝试创建一个最小的示例来演示这个问题。当你拥有它的时候,你可能会知道你做错了什么。如果不是,那就把它加到问题上。