Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中为二维数组重新分配内存_C_Realloc - Fatal编程技术网

在C语言中为二维数组重新分配内存

在C语言中为二维数组重新分配内存,c,realloc,C,Realloc,我的目标是为C语言中的二维int数组动态地重新分配内存。我知道关于这个主题已经有几个问题了,但不幸的是,我的代码没有正常运行,我不知道出了什么问题 首先,我分配内存: int n = 10; int m = 4; int** twoDimArray; twoDimArray = (int**)malloc(n * sizeof(int*)); for(int i = 0; i < n; i++) { twoDimArray[i] = (int*)malloc(m * sizeof(i

我的目标是为C语言中的二维int数组动态地重新分配内存。我知道关于这个主题已经有几个问题了,但不幸的是,我的代码没有正常运行,我不知道出了什么问题

首先,我分配内存:

int n = 10;
int m = 4;
int** twoDimArray;
twoDimArray = (int**)malloc(n * sizeof(int*));
for(int i = 0; i < n; i++) {
   twoDimArray[i] = (int*)malloc(m * sizeof(int));
}
我希望我的aray
twoDimArray
现在可以在[10][0]访问,但在运行时

printf("twoDimArray[10][0] = %d\n", twoDimArray[10][0]);
我得到一个“EXC\u BAD\u ACCESS”运行时错误


也许我遗漏了一些很简单的东西,但因为我是C语言的新手,所以无法找出我的错误。非常感谢您的帮助。

重新分配指针数组是必要的,但是您只有
n
值指向有效的内容。您需要分配其余的子数组,因为新分配的内存指向未分配/无效的区域。错误不是因为访问指针,而是因为取消引用它

您需要添加以下内容:

for(int i = n; i < n+plus; i++) {
   twoDimArray[i] = malloc(m * sizeof(int));
}
for(int i=n;i
(解除分配也是如此:首先解除分配循环中的数组,然后解除分配指针数组)

旁白:

  • 如果
    realloc
    返回
    NULL
    ,则将
    realloc
    的结果直接分配给原始变量可能会出现问题。即使在调整大小()的情况下很少出现这种情况,也应该将结果复制到一个临时变量中,检查
    NULL
    ,如果重新分配失败,则检查
    free
    旧指针

重新分配指针数组是必要的,但此时您只有指向有效对象的
n
值。您需要分配其余的子数组,因为新分配的内存指向未分配/无效的区域。错误不是因为访问指针,而是因为取消引用它

您需要添加以下内容:

for(int i = n; i < n+plus; i++) {
   twoDimArray[i] = malloc(m * sizeof(int));
}
for(int i=n;i
(解除分配也是如此:首先解除分配循环中的数组,然后解除分配指针数组)

旁白:

  • 如果
    realloc
    返回
    NULL
    ,则将
    realloc
    的结果直接分配给原始变量可能会出现问题。即使在调整大小()的情况下很少出现这种情况,也应该将结果复制到一个临时变量中,检查
    NULL
    ,如果重新分配失败,则检查
    free
    旧指针

您需要将数组从n分配到n+另外,它们是未定义的指针。EXC\u BAD\u访问听起来像运行时错误,而不是编译器错误。是的,很抱歉,我正在解决这个问题。谢谢你的指点!这里没有2D数组。您需要将数组从n分配到n+加上,它们是未定义的指针。EXC_BAD_访问听起来像运行时错误,而不是编译器错误。是的,抱歉,我正在解决这个问题。谢谢你的指点!这里没有2D数组。而且,
towDimArray=realloc(twoDimArray…
是一个潜在的内存泄漏。是的,如果它返回
NULL
。谢谢,这就解决了问题!当取消分配新数组时,我是否必须在新大小上创建for循环,即for(int i=0;itowDimArray=realloc(twoDimArray…是一个潜在的内存泄漏。是的,如果它返回
NULL
。谢谢,这就解决了问题!当取消分配新数组时,我是否必须在新大小上创建for循环,即for(int i=0;ifor(int i = n; i < n+plus; i++) { twoDimArray[i] = malloc(m * sizeof(int)); }