C - 创建 "2D Array"时出现段错误

标签 c arrays segmentation-fault malloc multidimensional-array

我必须创建一个包含 x 行的“二维数组”(用户可以决定多少行),并且每行应该有随机数量的列,这些列将随机生成,因此它看起来像这样:

2 - 4 - 6

1 - 2 - 8 - 9 - 2 - 3

1 - 2

每行的列数将保存在sizes[i]中。二维数组中的数字将随机生成。我通过 stackoverflow 查看了这里,并找到了一些有关动态内存分配的解决方案,但不知何故,我总是以“段错误”结束,并且我无法真正看到代码中的主要缺陷。因此,任何帮助都会得到帮助。 :)

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

int** create_array(int* sizes, int rows){
    int** array;
    array=(int**) malloc(rows*sizeof(int*));
    for(int i=0;i<rows;i++){
        array[i]=(int*) malloc((sizes[i])*sizeof(int));
    }
    for(int i=0;i<rows;i++){
        for(int j=0;j<sizes[i];j++){
            array[i][j]=(((double) rand() / (RAND_MAX))*20);
        }
    }
    return array;
}

void print_array(int** array, int* sizes){
    int rows=sizeof(sizes)/sizeof(sizes[0]);
    for(int i=0;i<rows;i++){
        for(int j=0;j<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char const *argv[])
{
    int rows = 0;
    srand(time(NULL));
    printf("Wie viele Zeilen möchten Sie erzeugen?");
    scanf("%d",&rows);
    int sizes[rows];
    for(int i=0;i<rows;i++){
        sizes[i]=(((double) rand() / (RAND_MAX))*9+1);
        printf(" %d ",sizes[i]);
    }
    int** arr;
    arr=create_array(sizes,rows);
    print_array(arr,sizes);
    return 0;
}

最佳答案

你有一个错误

for(int j=0;i<sizes[i];j++)

应该是

for(int j=0;j<sizes[i];j++)

如果你使用更多的空格,比如

,就会更容易发现这一点
for (int j = 0 ; i < sizes[i] ; j++)
/*               ^ see, here it's very clear now

而且,使用完数据后,不要忘记调用 free

也更改此功能

void print_array(int** array, int* sizes){
    int rows =sizeof(sizes)/sizeof(sizes[0]);
    for(int i=0;i<rows;i++){
        for(int j=0;i<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

无法确定 sizes 中元素的数量,您必须将其作为参数传递

void print_array(int** array, int* sizes, int rows)
{
    for(int i=0;i<rows;i++){
        for(int j=0;i<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

注意:无需在c中强制转换malloc,它可以隐藏错误。

关于C - 创建 "2D Array"时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801658/

相关文章:

Android Studio 模拟器崩溃 : Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

c - ubuntu 中 C 的段错误(核心转储)

c - 这个声明在 C11 标准中意味着什么(关于可变参数函数)?

c - 进程如何知道信号灯可用

PHP array_push() 因来自 SQL 的文本而失败

php数组获取某个元素的序号

c - 从文件流读取值并将其存储到可变大小数组中 - OpenGL 和 C

c - 尝试从一个内存位置复制到另一个内存位置时出现段错误

c - 从C到汇编jge和jg?

c - snprintf 不将最后一个字符存储在缓冲区中?