Tag: 多维数组

分段创建arrays时使用OpenMP时出错

在访问for循环内的数组时,我遇到了分段错误。 我想要做的是生成DNA串的所有子序列。 当我在for中创建数组时发生了这种情况。 阅读一段时间后,我发现openmp限制了堆栈大小,因此使用堆更安全。 所以我更改代码以使用malloc,但问题仍然存在。 这是完整的代码: #include #include #include #include #include #define DNA_SIZE 26 #define DNA “AGTC” static char** powerset(int argc, char* argv) { unsigned int i, j, bits, i_max = 1U <= sizeof(i) * CHAR_BIT) { fprintf(stderr, “Error: set too large\n”); exit(1); } omp_set_num_threads(2); char** subsequences = malloc(i_max*sizeof(char*)); #pragma omp parallel for shared(subsequences, argv) […]

在C中重新分配双2D数组

我写了一个函数,它应该为每个输入重新分配数组。 我认为这个function运行良好,但是当我尝试使用数组时,我得到了分段错误。 输入: [1,2] [6,3] [2.5,3.5] 我必须检查用户是否以正确的forms'[‘ number ‘,’ number ‘]’输入输入。 我必须至少有2个条目。 输入的结尾不是新行,而是EOF( CTRL + D或CTRL + Z )。 我的代码: double ** allocation (double ** field, int i) { double x = 0, y = 0; char obr[1], cbr[1], col[1]; while (scanf(“%c%lf%c%lf%c”, &obr, &x, &col, &y, &cbr) == 5) { if (col[0] != ‘,’ || […]

替代嵌套数组(6维),内存间隙保留O(1)访问权限

我正在阅读运行具有不同配置的程序的统计数据。 假设有6种配置( a , b ,…, f )。 配置可能不会线性变化,因此如果您将测量结果视为表格,则表格中可能存在间隙。 问题是关于在内存中构造这些统计数据。 首先想到的是将这些配置读取到动态分配的6深度数组或数组: struct data ******measurements; 现在这很好用。 您的内存开销很小(只有实际分配数据的配置),访问时间为O(1) 。 除了大多数人不喜欢******指针的事实之外,这还有一个缺点,即添加配置意味着向数组添加维度,除非将数组的读/写封装在函数中,否则可能会变得难看。 (写入已被封装以在必要时进行分配,因此实际上这并不是什么大问题)。 想到的另一个想法是使用struct config的映射来使用AVL树或其他东西(我已经拥有,因此没有实现开销)来struct data 。 这解决了扩展配置参数的问题,但减少了对O(log(n))访问时间。 对于O(log(n)) ,测试的数量可能会相当大,从而产生差异。 我的问题是:在这里使用6深度嵌套数组是否合理? 或者有更好的方法吗?

如何在C中shmget和shmat双数组?

我知道2D数组在C中可能很奇怪,而对于malloc,我会这样做: /* This is your 2D array. */ double** matrix; /* The size dimensions of your 2D array. */ int numRows, numCols; /* Used as indexes as in matrix[x][y]; */ int x, y; /* * Get values into numRows and numCols somehow. */ /* Allocate pointer memory for the first dimension of a matrix[][]; */ […]

如何使用尺寸未知的2D数组?

我正在为矩阵乘法编写C函数。 它需要两个二维2D数组。 如果我知道输入数组的大小,我可以这样做,但我想做一个更通用的function。 如何在编译时不知道产品的尺寸时如何找到它们的尺寸以及如何返回数组?

指向2darrays和手动内存管理的指针 – C.

我认为在纯C中构建一个处理各种矩阵计算的库是一个很好的挑战。现在,尽管我对Objective-C和Cocoa有一些非常好的经验,但我对C的知识才是我需要的。使用Objective-C而不是更多。 所以,例如,我熟悉C中指针,数组等的概念,但不熟悉malloc和free(ARC是幸福!)。 我决定接受这个项目,这样我就可以获得更多的C体验(当然,除了有很多乐趣之外!)。 到目前为止,我有一个像这样定义的矩阵: typedef float mReal; typedef struct { mReal **v; int w; int h; } matrix; 当然,我还需要一种方法来为我提供一个我想要的全新矩阵: void new_matrix(matrix *m, int w, int h) { m = malloc(sizeof(matrix)); m->w = w; m->h = h; m->v = malloc(w * sizeof *(m->v)); for (int i = 0; i v[i] = malloc(h * sizeof *(m->v[i])); } […]

为什么在分配指向2D数组的指针时需要指定行?

当没有提到2D数组的行时,编译器声明“从不兼容的指针类型赋值”,我一直认为没有括号的数组意味着第一个元素的地址,在这种情况下是元素的地址twodstring [0] [0] 当提到行时,编译器没有说出错误,我想知道为什么会这样? #include int main() { char onedstring[]={“1D Array”}; char twodstring[][5]={“2D”,”Array”}; char *p1,*p2; p1=onedstring; p2=twodstring; p2=twodstring[1]; }

分配6xNxNarrays

我有一个变量N 我需要一个6xNxNarrays。 像这样的东西: int arr[6][N][N]; 但是,显然,这不起作用。 我不知道如何分配这个以便我可以访问,例如arr[5][4][4]如果N是5,而arr[5][23][23]如果N是24 。 请注意, N永远不会改变,所以我永远不必重新分配realloc arr 。 我该怎么办? 将int ***arr = malloc(6 * N * N * sizeof(int)); 工作?

Lua C API:在结构C中初始化变量矩阵

我正在尝试使用Lua C API创建一个userdata,其中有一个metatable关联,我将收集一个矩阵。 我不能得到的是如何将初始化矩阵的每个分量设置为零。 我正如我在此描述的那样编译我的Lua模块C代码。 我的C代码如下: #include “lauxlib.h” #include “lua.h” typedef struct { LUA_NUMBER data[1][1]; int row; int col; }matrix; // Create a matrix full of zeros static int lb_newmatrix(lua_State *L) { // Variable declarations int i,j; matrix *temp; // Input checks if (lua_gettop(L)!=2) { lua_pushstring(L,”\n Two input required”); lua_error(L); } //–> Check I° index […]

什么是找到平均大小分布而不必声明一个巨大的2D数组的有效方法?

考虑L×L大小矩阵M,其条目可以是0或1.每个元素是1,概率为p,0是概率1-p。 我将标记为1的元素称为黑色元素,将标记为0的元素称为白色元素。 我正在尝试编写一个代码: 生成随机矩阵,条目为0和1。 我需要输入矩阵L的大小和概率p。 标记属于同一群集的所有黑色元素具有相同的编号。 ( 将一个黑色元素簇定义为单元格图形中的最大连通分量,其值为1,其中边连接的行和列之间的差异最多为1(因此每个单元最多有8个邻居)。如果矩阵的两个黑色元素共享边或顶点,则认为它们属于同一个黑色簇。即,将矩阵视为大方块,将元素视为大方块中的小方块。 ) 在从p = 0到p = 100的循环内(我将概率p称为百分比):将每个大小的黑色簇的数量写入对应于该p值的文件。 例如: 输入 :p = 30,L = 50 输出 (写入每个p的数据文件;因此该程序创建了101个数据文件,从p = 0到p = 100): 1 100(即有100个大小为1的黑色簇) 2 20(即有20个黑色簇,大小为2) 3 15(即有15个黑色簇,大小为3) 等等… #include “stdafx.h” #include #include #include #include #include #include int *labels; int n_labels = 0; int uf_find(int x) { int y = […]