Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在函数(即三重指针)中重新定位字符串数组_C_String_Dynamic Memory Allocation_Realloc - Fatal编程技术网

C 如何在函数(即三重指针)中重新定位字符串数组

C 如何在函数(即三重指针)中重新定位字符串数组,c,string,dynamic-memory-allocation,realloc,C,String,Dynamic Memory Allocation,Realloc,我有以下功能: void split(const char *string,const char *delimeter,size_t *splitArraySize,char ***splitArray); 它接收一个名为splitArray的三重指针,因为它必须重新分配字符串数组(一个char**) 在函数内部,我将重新分配为: ++(*splitArraySize); *splitArray=realloc(*splitArray,*splitArraySize*sizeof(char*)

我有以下功能:

void split(const char *string,const char *delimeter,size_t *splitArraySize,char ***splitArray);
它接收一个名为
splitArray
的三重指针,因为它必须重新分配字符串数组(一个
char**

在函数内部,我将重新分配为:

++(*splitArraySize);
*splitArray=realloc(*splitArray,*splitArraySize*sizeof(char*));
for(size_t b=0;b<*splitArraySize;b++){
  (*splitArray)[b]=realloc((*splitArray)[b],4096*sizeof(char));
}

在那一行。

以增加字符串数组的大小。请尝试创建一个显示。当然,还可以使用调试器捕捉这些问题,并准确定位它们在代码中发生的位置,并检查所有相关变量的值。使用
realloc()
增长数组后,分配的任何其他元素都将被取消初始化。因此,for-循环的
中的最后一个
realloc()
会得到一个无效指针。循环中的
realloc
调用对于
(*splitArray)[*splitArraySize-1]
中的最后一个和新创建的元素之外的所有元素都是无用的,您需要对其进行
malloc
调用,不是
realloc
。另一种方法是将函数中的
void split(…)
更改为
char**split(…)
和realloc,将realloc的指针返回给调用者进行赋值。这就消除了三星级程序员的问题。(但在某些情况下,做一名三星级程序员是你所能做的一切)
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1728==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000