在C语言中为二维数组重新分配内存
我的目标是为C语言中的二维int数组动态地重新分配内存。我知道关于这个主题已经有几个问题了,但不幸的是,我的代码没有正常运行,我不知道出了什么问题 首先,我分配内存:在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
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));
}
我希望我的araytwoDimArray
现在可以在[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
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));
}