PDMS 发表于 2014-10-16 14:54:40

请问为何 结构体成员 赋值时 0xC0000005: Access Violation.



在主函数里给结构体成员赋值编译通过GO一下却说 First-chance exception in xc.exe: 0xC0000005: Access Violation.



请大家指点一下 哪里有毛病   {:9_241:}


#include "stdafx.h"
#include<iostream>
using namespace std ;

struct sf
{
   int vm ;
} *st;

int main()
{
      st->vm = 900 ;

   cout<<"vm is "<<st->vm<<endl ;

       return 0;
}


仰望天上的光 发表于 2014-10-16 16:26:30

st是一个指针,它没有初始化,随机指向内存中的一个位置。然后你企图向这个随机内存写入值,所以出问题。这就是著名的“野指针”问题又称“悬垂指针”问题

PDMS 发表于 2014-10-16 19:45:34

仰望天上的光 发表于 2014-10-16 16:26
st是一个指针,它没有初始化,随机指向内存中的一个位置。然后你企图向这个随机内存写入值,所以出问题。这 ...


感谢老兄指教   我加了一行

st = (struct sf *)malloc(sizeof(struct sf)) ;

但是只有加入函数体才能编译通过 如果在外面就不行这个怎么解释好

下面这样就通不过

#include "stdafx.h"
#include<iostream>
using namespace std ;

struct sf
{
   int vm ;
} *st;

st = (struct sf *)malloc(sizeof(struct sf)) ;

int main()
{
       
        st->vm = 900 ;

   cout<<"vm is "<<st->vm<<endl ;

       system("pause") ;

       return 0;
}


仰望天上的光 发表于 2014-10-16 20:15:13

PDMS 发表于 2014-10-16 19:45
感谢老兄指教   我加了一行

st = (struct sf *)malloc(sizeof(struct sf)) ;

//#include "stdafx.h"
#include<iostream>
using namespace std ;
struct sf
{
      int vm ;
};
//st = (struct sf *)malloc(sizeof(struct sf)) ;
struct sf* st = (struct sf *)malloc(sizeof(struct sf)) ;
int main()
{         
      st->vm = 900 ;
      cout<<"vm is "<<st->vm<<endl ;
      system("pause") ;
      return 0;
      
}
函数体外的全局变量智能进行初始化(如我的代码),不能进行赋值(如你的代码)。还有。。。都用C++了。。。还在malloc啊。。。

大个的糖果 发表于 2014-10-30 15:31:06

页: [1]
查看完整版本: 请问为何 结构体成员 赋值时 0xC0000005: Access Violation.