此代码在运行时编译但崩溃。
typedef struct student{
char name[ 20 ];
char last[ 20 ];
unsigned long int ID;
char email[ 20 ];
char BA[ 4 ];
} *stu;
stu source[ 20 ];
for( int i=0; i<11 ;i++ ) //copy from file to array
{
if( fscanf( f1 ,"%s%s%u%s%s", &( source[ i ]->name ), &( source[ i ]->last ), &( source[ i ]->ID ), &( source[ i ]->email ), &( source[ i ]->BA ) ) == EOF );
}
这是它崩溃时带来的代码,它在此行停止(弹出窗口名称为input.c)
#ifndef _UNICODE
*(char *)pointer = (char)ch; /* stops on this line */
pointer = (char *)pointer + 1;
我得到的错误消息是“在...中的未处理异常... exe:0xC0000005:访问冲突写入位置0xccccccc”。
有谁知道为什么?
答案 0 :(得分:2)
您输入了:
typedef struct student{...}*stu;
它是一个指向struct的指针,你刚刚声明了一个没有任何东西的20个指针的数组,你不知道这些指针指向哪里,很可能不是有效的内存区域。
以这种方式声明:
struct student source[ 20 ];
或者使用动态分配,但我想在您的情况下没有必要。
答案 1 :(得分:0)
只需在stu。
之前删除'*'即可说明: 你混合了两件事。
的结构声明struct student{
char name[ 20 ];
char last[ 20 ];
unsigned long int ID;
char email[ 20 ];
char BA[ 4 ];
};
如果你只是在做,你应该声明一个这样的变量:
struct student var;
并重命名:
typedef struct student newName;
在这种情况下,你应该声明一个这样的变量:
newName variable;
所以使用你的代码:
typedef struct student{
char name[ 20 ];
char last[ 20 ];
unsigned long int ID;
char email[ 20 ];
char BA[ 4 ];
} *stu;
你必须在stu之前删除'*',如下所示:
typedef struct student{
char name[ 20 ];
char last[ 20 ];
unsigned long int ID;
char email[ 20 ];
char BA[ 4 ];
} stu;
然后声明你的变量:
stu source[20];