gpt4 book ai didi

c - 使用全局结构变量时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:53 25 4
gpt4 key购买 nike

这是一个旨在处理 ppm 图像文件的程序。

我在尝试从文件中读取图像并将该图像分配给我的全局结构图像时遇到段错误。

这些是我的 ppmIO.c 文件的相关部分:

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <ppmIO.h>

struct Image *instance;

void ImageRead(char *filename)
{
printf("hi 0!");
int width, height, num, size;
//unsigned char *p;

//Image *image = (Image *) malloc(sizeof(Image));
FILE *fp = fopen(filename, "r");

//if (!image) die("cannot allocate memory for new image");
if (!fp) die("cannot open file for reading");

readPPMHeader(fp, &width, &height);


size = width * height * 3;
printf("hi!");
//instance->data = (unsigned char *) malloc(size);
printf("hi 2!");
instance->width = width;
printf("hi 3!");
instance->height = height;
printf("hi 4!");

if (!instance->data) die("cannot allocate memory for new image");

num = fread((void *) instance->data, 1, (size_t) size, fp);

if (num != size) die("cannot read image data from file");


fclose(fp);

}

这是我的 ppmIO.h 文件:

#ifndef PPMIO_H
#define PPMIO_H

struct Image
{
int width;
int height;
unsigned char *data;
};

extern struct Image *instance;

//extern Image *ImageCreate(int width, int height);
//extern void ImageClear(struct Image *image, unsigned char red, unsigned char green, unsigned char blue);
extern void ImageRead(char *filename);
extern void ImageWrite(char *filename);

extern void ImageSetPixel(int x, int y, int chan, unsigned char val);
extern unsigned char ImageGetPixel(int x, int y, int chan);

#endif /* PPMIO_H */

这是 GDB 报告的段错误:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400fff in ImageRead (filename=0x7fffffffdc32 "nika.ppm")
at ppmIO.c:126
126 instance->width = width;

我认为我尝试使用 Image *instance 的方式存在问题...但我真的不知道是什么导致了这个困惑。 :(

最佳答案

您收到此错误是因为您没有为 instance 分配任何内存。在尝试使用实例的任何成员(即 widthdata)之前,您必须分配内存(从函数内部),即:

instance = malloc(sizeof *instance);

您不应转换实例的返回值(参见:this),并且无需指定类型,因为编译器已经知道。声明变量时不能分配内存,因为静态初始化必须为常量值(请参阅:this)(函数的返回值不是常量)。

您还需要根据从文件中读取的大小为结构的instance->data 部分分配内存。

关于c - 使用全局结构变量时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com