You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用结构体时出现Segmentation Fault问题求助

解决你的Segmentation Fault问题

嘿,你的段错误问题很典型——野指针在搞鬼!咱们一步步拆解来看:

问题根源

你在main里定义了struct AnimalSizes *snakes;,但这个指针只是被声明了,却没有初始化:它没有指向任何一块合法的内存空间,现在就是个"野指针",指向的是随机的内存地址。当你尝试用snakes[0].stringName或者snakes[1].sizeLength去读写的时候,其实是在访问不属于你的内存区域,操作系统自然会抛出Segmentation Fault来阻止这种非法操作。

两种修复方案

方案1:让指针指向你已经定义好的全局数组

你已经在全局作用域定义了animalSizes[2]这个数组,直接让snakes指向它就行:

#include <stdio.h>
#include <string.h>
struct AnimalSizes {
    char stringName[50];
    double sizeLength;
} animalSizes[2];
int main() {
    // 让指针指向已有的全局数组
    struct AnimalSizes *snakes = animalSizes;
    strcpy(snakes[0].stringName,"Anaconda");
    snakes[0].sizeLength=3.7;
    strcpy(snakes[1].stringName,"Python");
    snakes[1].sizeLength= 2.4;
    // 改成%s打印整个字符串更直观
    printf("第一个动物:%s,长度%.2lf\n", snakes[0].stringName, snakes[0].sizeLength);
    printf("第二个动物:%s,长度%.2lf\n", snakes[1].stringName, snakes[1].sizeLength);
    return 0;
}

方案2:动态分配内存给指针

如果不想用全局数组,也可以用malloc给指针分配足够的内存(记得最后用free释放,避免内存泄漏):

#include <stdio.h>
#include <string.h>
#include <stdlib.h> // 要包含malloc/free的头文件

struct AnimalSizes {
    char stringName[50];
    double sizeLength;
};

int main() {
    // 分配能存2个AnimalSizes结构体的内存
    struct AnimalSizes *snakes = malloc(2 * sizeof(struct AnimalSizes));
    // 一定要检查malloc是否成功!
    if (snakes == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    
    strcpy(snakes[0].stringName,"Anaconda");
    snakes[0].sizeLength=3.7;
    strcpy(snakes[1].stringName,"Python");
    snakes[1].sizeLength= 2.4;
    
    printf("第一个动物:%s,长度%.2lf\n", snakes[0].stringName, snakes[0].sizeLength);
    printf("第二个动物:%s,长度%.2lf\n", snakes[1].stringName, snakes[1].sizeLength);
    
    // 释放动态分配的内存
    free(snakes);
    return 0;
}

额外小提示

  • 你的原代码里用%c打印*snakes[0].stringName,这只会输出字符串的第一个字符(比如'A'和'P'),如果要打印整个动物名称,用%s格式符更合适。
  • 动态分配内存后,一定要检查返回值是否为NULL,避免内存分配失败导致后续操作出错。

内容的提问来源于stack exchange,提问作者unicorns101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:27:54