2D 动态数组程序崩溃
2d dynamic array program crashes
我写了一个动态分配的 2D 数组,但由于某种原因它没有按我的预期工作。我分配了一个 14x5 数组来存储值。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, count, count2;
int size, keysize, column;
size = 7; keysize = 10; column = 5;
int row = (size * keysize) / column; // 14
char **arr = (char **)malloc(column * sizeof(char *));
for(i=0; i<row; i++)
arr[i] = (char *)malloc(row * sizeof(char *));
count=0;
count2=0;
for(i=0; i<keysize; i++)
{
for(j=0; j<size; j++)
{
printf("arr[%d][%d]=", count2, count);
arr[count2][count] = 'C';
printf("%cn", arr[count2][count]);
count++;
if(count == 5)
{
count = 0;
count2++;
}
}
}
return 0;
}
似乎在位置arr[6][0]插入值时程序崩溃。在此之前,它工作正常。我插入了一些 printf 语句来捕捉这种情况。
我不确定它为什么要这样做,内存的分配对我来说看起来很好,但我不是专家。
感谢您的任何帮助。
更改为
char **arr = (char **)malloc(row * sizeof(char *));
for(i=0; i<row; i++)
arr[i] = (char *)malloc(column * sizeof(char));
我注意到用c ++标签标记的问题,在c ++中执行此操作的明确方法是使用std::vector
。所以我回答这个问题,就好像它是一个C问题一样:
看起来您在这里没有分配足够的空间。
column = 5;
char **arr = (char **)malloc(column * sizeof(char *));
这为 5 个指向行的指针腾出了空间。然后稍后当你循环时:
for(i=0; i<keysize; i++)//note keysize is 10
{
for(j=0; j<size; j++){ // note size is 7
arr[count2][count];
count++;
if(count == 5){
count = 0;
count2++;//gets incremented every time the inner loop runs
}
}
}
因为每次内部循环运行时count2
都会递增,所以它最终会变得和keysize
一样大。这意味着arr[keysize][0]
必须是有效的,这不是因为你实际上做了arr[5][14]
。第一个失败是当你调用 arr[6][0] 时,它会访问数组的末尾并导致程序崩溃。
如果此处的目的是初始化变量,那么要解决此问题,您可能希望遍历用于分配内存的维度的相同值。
相关文章:
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序