在C中创建动态三维阵列
我有以下C代码:在C中创建动态三维阵列,c,arrays,multidimensional-array,char,C,Arrays,Multidimensional Array,Char,我有以下C代码: char buffer[255]; char ***data = NULL; int i = 0; int size = 10; **data = (char*) calloc(size, sizeof(char**)); while(fgets(buffer, 255, database)) { if(i + 1 >= size) { size += 10; **data = (char*) realloc(*
char buffer[255];
char ***data = NULL;
int i = 0;
int size = 10;
**data = (char*) calloc(size, sizeof(char**));
while(fgets(buffer, 255, database)) {
if(i + 1 >= size) {
size += 10;
**data = (char*) realloc(**data, size*sizeof(char**));
}
char **line = str_split(buffer, ',', 6);
**data[i++] = **line;
}
我是C的一个呆子,我根本不懂我的代码。但是我想要一个3D字符数组(在Java中我会说是2D字符串数组)。第一个[]是我用“数据库”中的“fgets”读取文本文件中的行(我不知道有多少行,这就是为什么我希望它是动态的)。第二个[]和第三个[]用str_split中的值填充 str_split工作正常,代码如下:
char** str_split(char* str, const char a_delim, int count) {
char **result;
char *token;
char *rest = str;
char delim[] = { a_delim, '\0' };
result = (char**) malloc(sizeof(char*) * count);
int i = 0;
while((token = strtok_s(rest, delim, &rest))) {
*(result + i++) = token;
}
return result;
}
因此,问题是在运行时我得到以下错误:
访问冲突写入位置0x00000000
怎么了?第一个alloc应该是这样的:
data = (char***) calloc(size, sizeof(char**));
realloc和finally类似
data[i++] = line;
问题是您试图取消引用数据(
**data
)以将calloc的值分配给它,但数据一开始是空的,因此您会遇到访问冲突。一般来说,在执行指针之前,您应该确保它不为空。1)**data=(char*)calloc(size,sizeof(char**))代码>-->data=(char***)calloc(size,sizeof(char**))代码>“我没有真正理解我的代码”:那你是怎么写的?这个错误发生在哪里?“我几乎不懂我的代码”好吧,这很令人沮丧。你怎么能指望别人理解呢?@BLUEPIXY你有什么“2”字吗?@EugeneSh。是的,1,2,3。。。