Tag: 多维数组

初始化数组时出现Seg Fault

我正在上课,并遇到分段错误。 根据我的理解,当您访问尚未分配的内存或超出边界时,应该发生seg错误。 ‘当然我要做的就是初始化一个数组(虽然相当大) 我只是误解了如何解析二维数组? 错误放置绑定正是导致seg错误的原因 – 我在使用嵌套for-loop时错了吗? 教授提供了时钟function,所以我希望这不是问题所在。 我在Cygwin中运行此代码,这可能是问题吗? 源代码如下。 也使用c99标准。 要非常清楚:我正在寻找帮助理解(并最终修复)我的代码产生seg错误的原因。 #include #include int main(void){ //first define the array and two doubles to count elapsed seconds. double rowMajor, colMajor; rowMajor = colMajor = 0; int majorArray [1000][1000] = {}; clock_t start, end; //set it up to perform the test 100 times. for(int k = […]

如何在C99中为隐式定义的多维数组分配内存?

我正在尝试编写一个C99程序,我有一个隐式定义的字符串数组: char *stuff[] = {“hello”,”pie”,”deadbeef”}; 由于未定义数组维度,因此为每个字符串分配了多少内存? 是否所有字符串都分配了与定义中最大字符串相同数量的元素? 例如,以下代码是否等同于上面的隐式定义: char stuff[3][9]; strcpy(stuff[0], “hello”); strcpy(stuff[1], “pie”); strcpy(stuff[2], “deadbeef”); 或者每个字符串只分配定义时所需的内存量(即stuff[0]包含6个元素的数组, stuff[1]包含4个元素的数组, stuff[2]包含一个数组9个元素)?

差异b / w在1行或逐行中将内存分配给2Darrays

在这两种情况下,访问数组或内存分配会产生什么影响: 1。 int **arr; arr = malloc( sizeof(int) * row * column ); 2。 int **arr; arr = malloc( sizeof(*arr) * row); for(i=0; i<row; i++) arr[i] = malloc( sizeof( **arr) * column));

multiArray和multiArray 和&multiArray 相同?

在第6行而不是multiArray [0],当我编写multiArray时,程序仍然有效。 不明白为什么。 我之前想过,multiArray是指向multiArray [0]的指针,它是指向multiArray [0] [0]的指针。 所以multiArray就是一个指向指针的指针。 multiArray [0]是指向4元素int数组的指针。 所以似乎multiArray和multiArray [0]必须是不同的。 但是在下面的代码中,两者都有效。 我写的打印函数需要一个指向4元素int数组的指针。 所以只有multiArray [0]必须工作,而multiArray必须不能工作。 但两者都有效。 不明白。 #include void printArr(int(*ptr)[4]); int i, k; int main(void){ int multiArray[3][4] = { { 1, 5, 2, 4 }, { 0, 6, 3, 14 }, { 132, 4, 22, 5 } }; int(*point)[4] = multiArray[0]; for (k = […]

多维数组的指针如何在C中工作

我在C中尝试指向多维数组的概念。假设我想通过函数处理多维数组。 代码有点像这样: #include void proc_arr(int ***array) { // some code } int main(int argc, char **argv) { int array[10][10]; for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { array[i][j] = i * j; } } proc_arr(&array); return 0; } 问题是,当我想访问proc_arr array ,我不能。 根据我的理解,我们应该这样访问它: void proc_arr(int ***array) […]

如何将简单指针转换为固定大小的多维数组?

我有一个函数,它采用指向浮点数组的指针。 基于其他条件,我知道指针实际上指向2×2 OR 3×3矩阵。 (实际上内存最初是这样分配的,例如float M [2] [2])重要的是我想在函数体中做出这个决定,而不是作为函数参数。 void calcMatrix( int face, float * matrixReturnAsArray ) { // Here, I would much rather work in natural matrix notation if( is2x2 ) { // ### cast matrixReturnAsArray to somethingAsMatrix[2][2] somethingAsMatrix[0][1] = 2.002; // etc.. } else if(is3x3) { //etc… } } 我知道我可以使用模板和其他技术来更好地解决这个问题。 我的问题是关于如何在###评论中进行这样的演员表。 使用C ++。

C编程:用于2D数组的malloc()(使用指针到指针)

昨天我发布了一个问题: 我应该如何传递指向函数的指针并为被调用函数内部传递的指针分配内存? 从我得到的答案中,我能够理解我在做什么错误。 我现在面临一个新问题,任何人都可以帮忙解决这个问题吗? 我想动态分配一个2D数组,所以我将指针从我的main()传递给另一个名为alloc_2D_pixels(…)函数,其中我使用malloc(…)和for(…)循环为2D数组分配内存。 好吧,从alloc_2D_pixels(…)函数返回后,指针指针仍然保持为NULL,所以很自然地,当我尝试访问或尝试free(…)指针到指针时,程序挂起。 谁能告诉我我在这里犯的错误? 救命!!! 维克拉姆 资源: main() { unsigned char **ptr; unsigned int rows, cols; if(alloc_2D_pixels(&ptr, rows, cols)==ERROR) // Satisfies this condition printf(“Memory for the 2D array not allocated”); // NO ERROR is returned if(ptr == NULL) // ptr is NULL so no memory was allocated printf(“Yes its NULL!”); // Because […]

C / C ++如何在没有嵌套循环的情况下复制多维char数组?

我正在寻找一种将多维char数组复制到新目标的智能方法。 我想复制char数组,因为我想编辑内容而不更改源数组。 我可以构建嵌套循环来手动复制每个字符,但我希望有更好的方法。 更新: 我没有2. level维度的大小。 给定的只是长度(行)。 代码如下所示: char **tmp; char **realDest; int length = someFunctionThatFillsTmp(&tmp); //now I want to copy tmp to realDest 我正在寻找一种方法,将tmp的所有内存复制到空闲内存中,并将realDest指向它。 更新2: someFunctionThatFillsTmp()是Redis C lib credis.c中的函数credis_lrange()。 在lib tmp中创建了: rhnd->reply.multibulk.bulks = malloc(sizeof(char *)*CR_MULTIBULK_SIZE) 更新3: 我试过用这行代码使用memcpy: int cb = sizeof(char) * size * 8; //string inside 2. level has 8 chars memcpy(realDest,tmp,cb); cout […]

3D数组的动态内存分配

可能重复: Malloc是C中的三维数组? 2D和3Darrays的动态分配/释放 如何使用malloc分配3D数组?

为什么初始化这样的二维数组会更糟​​?

for(int i = 0; i<100; i++) for(int j = 0; j<100; j++) array[j][i] = 0; // array[i][j] = 0; 我的教授说,第一种方式初始化二维数组要比第二种方式要昂贵得多。 有人可以解释引擎盖下面发生了什么事情吗? 或者,这两种初始化方法是否具有相同的性能?