这是我的代码片段,用于创建保存 char 数组的 2D 数组。如果有人能找出原因,那就太好了。我尝试使用 malloc()
和 calloc()
为二维数组分配内存,但没有任何积极迹象。
代码片段:
char** attrNames = (char **)malloc(3*sizeof(char*))
for (m = 0; m < 3; m++) {
attrNames[m] = (char *)malloc(2 * sizeof(char*));
strcpy(schema->attrNames[m], temp_buff2[m]);
}
我正在尝试分配内存,然后继续循环并再次分配内存并将数据从名为 temp_buff2
的变量(具有字符数据)复制到 char 数组中。
最佳答案
尝试下面的代码。尽管您的项目中不太可能出现内存分配错误,但现在是培养良好的错误处理反射能力的好时机 - 当您转向更严肃的项目时,它将拯救您的培根。
请注意,char* 指针需要一个等于字符串长度加上一个额外字节的缓冲区。 sizeof(char*) 是一个很小的值,在 64 位架构上只有 8 - 它只存储字符串开始的内存地址的值。请注意,我们需要在 strlen() 之上加上 +1,因为 strcpy() 将存储一个额外的字节 (\0) 作为字符串终止符。
char** attrNames = (char **)malloc(3*sizeof(char*));
if (!attrName)
{
// handle memory error
}
for (m = 0; m < 3; m++) {
attrNames[m] = (char *)malloc(strlen(temp_buff2[m])+1);
if (!attrNames[m])
{
// handle memory error
}
strcpy(schema->attrNames[m], temp_buff2[m]);
}
可以通过从函数返回错误代码或通过如下所示的致命退出来处理内存错误:
fprintf(stderr, "Out of memory\n");
exit(1);
您需要#include <stdlib.h>
exit() 的原型(prototype)。
关于c - 二维字符数组的 malloc 函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576885/