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 10

typedef 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;
}

错误提示信息.
clipboard.png

阅读 5.1k
2 个回答

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

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;
}

第一个list是一个脏指针,没有赋nullptr,也没有指向任何合法的内存;
第二个list是一个合法的ArrayList地址;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题