首页  >  问答  >  正文

vs2008调试出错, 结构体变量使用前未初始化.

更新: 问题出在主函数的

ArrayListPtr list; // 结构体指针Init(list); // 传入结构体指针

这两行代码上. 如果换成

ArrayList list; // 结构体Init(&list); // 传入结构体地址

如果只是一个空指针的话, 什么也做不了.

全部代码如下: vs2008可以编译但是不能执行. 但是我直接用gcc编译的就能执行.

#include<stdio.h>#include<malloc.h>typedef int ElementType;typedef int Status;#define OK 1#define ERROR 0#define MAX_SIZE 100#define INCREMENT 10typedef struct ArrayList {
   ElementType *element;    int length;    int size;
}ArrayList, *ArrayListPtr;Status Init(ArrayListPtr list_ptr) {    // allote space for list
   list_ptr->element = (ElementType*)malloc(MAX_SIZE * sizeof(ElementType));    if(!list_ptr->element) {        return ERROR;
   }    
   // set length and size
   list_ptr->length = 0;
   list_ptr->size = MAX_SIZE;    
   return OK;
}int main() {
   ArrayListPtr list;
   Init(list);    printf("length: %d\n", list->length);    printf("size: %d\n", list->size);    return 0;
}

错误提示信息.

542125261-58216b2bbc431_articlex.png

巴扎黑巴扎黑2921 天前977

全部回复(1)我来回复

  • 面对疾风吧

    面对疾风吧2016-11-09 16:17:51

    指针使用之前一定要初始化

    int main() {
        ArrayListPtr list;
        Init(list);    /*
        //两种改法
        ArrayList list;
        Init(&list) // 以下的操作都不是指针,访问成员要改为`.`
        
        //或者
        ArrayListPtr list = (ArrayListPtr)malloc(sizeof(ArrayList));
        Init(list);
        */
        
        printf("length: %d\n", list->length);    printf("size: %d\n", list->size);    return 0;
    }


    回复
    0
  • 取消回复