这是我的代码片段,用于创建包含char数组的2D数组。如果有人能找出原因可能会很棒。我尝试使用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]);
}
来为2D数组分配内存,但没有正号。
代码段:
temp_buff2
我正在尝试分配内存,然后继续循环并再次分配内存并将数据从名为import matplotlib.pyplot as plt
import numpy as np
heatmap = np.asarray([[20, 0, 40],
[0, 40, 40],
[20, 40, 50]])
heatmap_plot = plt.pcolor(heatmap, cmap='RdBu', vmin=0, vmax=100)
plt.show()
的变量(包含字符数据)复制到char数组中。
答案 0 :(得分:0)
尝试以下代码。即使您的项目中的内存分配错误可能不太可能,现在是开发良好的错误处理反射的好时机 - 当您转向更严肃的项目时,它将节省您的培根。
请注意,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()的原型。
答案 1 :(得分:0)
你需要为“temp_buff2”中的任何内容预留足够的空间。例如:
char** attrNames = (char **)malloc(3*sizeof(char*))
for (m = 0; m < 3; m++) {
attrNames[m] = (char *)malloc( strlen(temp_buff2[m]) + 1 );
strcpy(schema->attrNames[m], temp_buff2[m]);
}
请注意,我在strlen结果中添加1,这是因为我们需要为null char终结符保留一个额外的字节。