用于检查 C 中多维数组所有维度的内存分配的函数
A function for checking memory allocation for all dimensions of a multidimensional array in C
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define numOfStrings 10
#define sizeOfString 30
void crashControl();
int main()
{
char **strArray = (char **)malloc(numOfStrings*sizeof(char *));
crashControl(strArray);
for (int i = 0; i < numOfStrings; i++)
{
strArray[i] = (char *)malloc(sizeOfString*sizeof(char));
crashControl(strArray[i]);
}
return 0;
}
void crashControl(char *A)
{
if (!A)
{
printf("Not enough space.\n");
exit(1);
}
}
它似乎工作正常。当我增加 numOfStrings
太多时 crashControl(strArray)
工作正常。同样,当我增加 sizeofString
太多时,crashControl(strArray[i])
也能正常工作。但我想知道,我这样做是对还是错?此代码是否存在风险或错误? crashControl()
函数的参数是一维数组,我可以随意对任何N维数组使用这个函数吗?
是的,您可以将它用于多维数组。但是,在这种情况下重写它可能会很好。不要将 char *
作为参数,而应将 void *
设为通用参数。
你的函数测试的基本上就是指针是否为空指针。仅此而已。我会说它的设计非常糟糕,因为该功能给人的印象是它做得更多。我看不出有任何理由在单独的函数中进行空检查。最好在 malloc 之后立即进行检查,如下所示:
char **strArray = (char **)malloc(numOfStrings*sizeof(char *));
if(!strArray) {
printf("Error allocating memory\n");
exit(1);
}
如果你真的想在一个函数中做这个检查,我建议将它命名为 isNull
并这样写:
int isNull(void * ptr)
{
if(ptr)
return 0;
else
return 1;
}
但是由于这个函数总是在 if 语句中被调用,所以这是毫无意义的。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define numOfStrings 10
#define sizeOfString 30
void crashControl();
int main()
{
char **strArray = (char **)malloc(numOfStrings*sizeof(char *));
crashControl(strArray);
for (int i = 0; i < numOfStrings; i++)
{
strArray[i] = (char *)malloc(sizeOfString*sizeof(char));
crashControl(strArray[i]);
}
return 0;
}
void crashControl(char *A)
{
if (!A)
{
printf("Not enough space.\n");
exit(1);
}
}
它似乎工作正常。当我增加 numOfStrings
太多时 crashControl(strArray)
工作正常。同样,当我增加 sizeofString
太多时,crashControl(strArray[i])
也能正常工作。但我想知道,我这样做是对还是错?此代码是否存在风险或错误? crashControl()
函数的参数是一维数组,我可以随意对任何N维数组使用这个函数吗?
是的,您可以将它用于多维数组。但是,在这种情况下重写它可能会很好。不要将 char *
作为参数,而应将 void *
设为通用参数。
你的函数测试的基本上就是指针是否为空指针。仅此而已。我会说它的设计非常糟糕,因为该功能给人的印象是它做得更多。我看不出有任何理由在单独的函数中进行空检查。最好在 malloc 之后立即进行检查,如下所示:
char **strArray = (char **)malloc(numOfStrings*sizeof(char *));
if(!strArray) {
printf("Error allocating memory\n");
exit(1);
}
如果你真的想在一个函数中做这个检查,我建议将它命名为 isNull
并这样写:
int isNull(void * ptr)
{
if(ptr)
return 0;
else
return 1;
}
但是由于这个函数总是在 if 语句中被调用,所以这是毫无意义的。