gpt4 book ai didi

c - 树莓派上的结构段错误gcc

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:04 25 4
gpt4 key购买 nike

我正在努力处理少量 C 代码,试图在 RPI2b 上运行。

这段代码是关于创建一个结构,其中包含一个具有动态大小的整数数组。

结构文件必须在我的主函数中声明为指针。

这是因为:我的程序的更大目的是通过使用 pthread 并行执行三个数组迭代。

据我所知,pthread 在函数调用中需要一个指针。我不想通过使用 pthread 来改变任何东西(永远不要改变获胜的团队)。

这是我的代码片段应该做的:

  • 定义一个STEP编号
  • 声明一个定义了步数的静态整数数组
  • 声明一个包含动态数组的结构
  • 填充静态整型数组
  • 为动态数组分配内存
  • 用静态整型数组的值填充动态数组
  • 在控制台打印两者

使用 gcc 编译时没有错误!

问题是,当它为动态数组程序分配内存时,只会在控制台上显示“段错误”。

有趣的是:我已将整个代码复制并粘贴到 Visual Studio 2017,它运行得非常好!

这是我的代码:

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

#define STEPS 50 //defined steps

typedef struct file File;

struct file {
int type;
int* array; //dynamic array
};

int main(void) {
int i = 0;
int mainarray[STEPS] = { 0 };
struct file *f = (File*)malloc(sizeof(File)); //allocate memory for struct

printf("Fill up static array\n");
for (i = 0; i <= STEPS; i++) {
mainarray[i] = i;
}
printf("static array values:\n");
for (i = 0; i <= STEPS; i++) {
printf("%d\n", mainarray[i]);
}
printf("allocate memory for dynamic array\n");
f->array = (int*)malloc(sizeof(int) * STEPS); //Here I receive my segmentation fault
if (f->array == NULL) {
printf("allocating error\n");
}

for (i = 0; i <= STEPS; i++) {
f->array[i] = 20000 * mainarray[i];
}

printf("compare of arrays\n");

for (i = 0; i <= STEPS; i++) {
printf("i:=\t%d\tMainarray:\t%d\tStructarray:\t%d\t\n", i, mainarray[i], f->array[i]);
}
free(f->array);
free(f);
}

最佳答案

您的问题是(请参阅某些程序员兄弟的评论)您超出了数组的范围。这会导致未定义的行为,在您的情况下会导致段错误。

for (i = 0; i <= STEPS; i++) 

应该是:

for (i = 0; i < STEPS; i++) 

因为STEPS-1最后 有效的数组元素。

关于c - 树莓派上的结构段错误gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775389/

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