MST
星途 面试题库

面试题:C语言中用malloc分配结构体大内存时如何检测分配是否成功

在C语言里,使用malloc为一个较大的结构体分配内存,代码如下: ```c #include <stdio.h> #include <stdlib.h> // 定义一个结构体 typedef struct { int data[10000]; } BigStruct; int main() { BigStruct *bs; bs = (BigStruct *)malloc(sizeof(BigStruct)); // 在此处添加代码检测内存分配是否成功,并在失败时打印错误信息 return 0; } ```请补全检测内存分配是否成功的代码,并说明原因。
40.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 定义一个结构体
typedef struct {
    int data[10000];
} BigStruct;

int main() {
    BigStruct *bs;
    bs = (BigStruct *)malloc(sizeof(BigStruct));
    if (bs == NULL) {
        perror("malloc failed");
        return 1;
    }
    // 后续可以在这里使用分配好的内存
    free(bs); // 使用完后释放内存
    return 0;
}

原因:malloc函数在内存分配失败时会返回NULL。因此通过检查malloc的返回值是否为NULL,可以判断内存分配是否成功。如果返回NULL,说明内存分配失败,此时使用perror函数打印错误信息,该函数会输出与最近一次系统调用相关的错误信息,便于调试。同时返回一个非零值表示程序异常结束。如果分配成功,则可以继续使用分配到的内存,使用完后要记得调用free函数释放内存,避免内存泄漏。