0

棘手的结构指针迭代而不给出转储

结构指针不给转储

#include <iostream>
#include <malloc.h>
#include <conio.h>
using namespace std;

typedef struct 
{
 int k;       

}struct1;        

typedef struct 
{
  int i;
  char *ptr;     
  int len;     
  struct1 otherinstance;
}struct2;

int func(struct2 *instance,int y)
{
    int res = 0,i=0;
    for(i=0;i<y;i++)
    {
    instance[i].otherinstance.k = 10;
    printf("Data = %d\n",instance[i].otherinstance.k);
    }    
    return res;        
}


int main()
{
 int x =3;   
 struct2 *instance1 = (struct2*)malloc(sizeof(struct2));
 func(instance1,3);  
 cin.get();  
 return 0;   
}

/*
Output:
Data = 10       
Data = 10
Data = 10       
*/

请分析上面的代码。我有一个函数名“func”,它接受指向结构的指针。在函数“func”中,我正在遍历结构数组:“应该给转储”。

工具:dev c++ windows

4

2 回答 2

2

您的意思是您知道 sizeof(instance1) 应该是 n * sizeof(*instance1) 以及为什么它不会在 func 中崩溃?这就是所谓的未定义行为,它可以工作,因为从 malloc 返回的内存是有效内存,您可以在 func 中访问它。尝试在发布版本和优化等中运行它,看看它何时开始崩溃。

于 2013-10-24T06:10:25.490 回答
0

未定义的行为。并且在大多数编译器中使用sizeof(struct2)malloc会崩溃。

于 2013-10-24T06:15:52.577 回答