需要帮助在C中创建动态char数组

时间:2014-02-15 02:33:48

标签: c arrays

我在创建动态字符数组时遇到问题。这是我到目前为止所做的。

char * arr;
arr = (char*)malloc (2 * sizeof (char));

它不是仅为2个字符分配空间,它让我进入arr [8]然后在8之后给我带来奇怪的错误。

我也试过制作一个二维char数组。第一个维度正确分配,但第二个维度的空间比我允许的空间大,并且大约12个字符左右会出现错误。任何帮助将不胜感激。如果可能的话,我更愿意制作一维动态数组。

2 个答案:

答案 0 :(得分:1)

此行arr = (char*)malloc (2 * sizeof (char));将仅为2个字节分配内存。但是你通过访问8个或8个以上的字节来覆盖内存。如果您访问两个以上的byes方法,它将给出一些不可预测的问题。如果您想要更多内存,请遵循以下代码。

#define USER_SIZE 10
arr = (char*)malloc ( USER_SIZE * sizeof (char));

USER_SIZE宏中分配值,然后根据需要分配内存。

2D指针(5 X 10)的示例

#define ROW 5
#define COLUMN 10
main()
{
  unsigned char **p = NULL, colum = 0;
  p = malloc ( ROW * sizeof ( unsigned char *) );
  for (;colum< ROW; ++colum )
  {
    p[colum] = malloc (COLUMN * sizeof (unsigned char  ));
  }
}

答案 1 :(得分:0)

通过写malloc调用分配的内存范围,您所做的是buffer overflow。编译器不进行边界检查(它假定您知道自己在做什么,并且只需为使用的内容付费)并允许您编译和运行。但是,它会导致未定义的行为,并且您的程序可能会崩溃。你不应该依赖这种行为。

程序员必须确保不要进行非法内存访问。你不应该投射malloc的结果。此外,malloc可能无法分配内存,在这种情况下,它会返回空值指针NULL,您应该注意它。您可以将两个语句合并为一个。

int length = 8; // you can also use a macro
char *arr = malloc(length * sizeof *arr);
if(arr) {
    // malloc call successful
    // do stuff with arr
}