所以基本上有一个函数可以分配新的指针内存,当我尝试移开旧的指针时,程序基本上会崩溃my code
char** AddingToTheBook(char** original, int* size, char *number)
{
char** newArray = (char**)malloc(sizeof(char*)*(*size));
//allocating and copying the values
for (int i = 0; i < *size; i++)
{
*(newArray + i) = (char*)malloc(sizeof(char)*(strlen(*(original + i))));
strcpy(*(newArray + i), *(original + i));
}
//allocating a new memory to the new number
*(newArray + (*size)) = (char*)malloc(sizeof(char)*strlen(number));
strcpy(*(newArray + (*size)), number);
(*size)++;
//delocating the allocated memories
for (int i = 0; i < size; i++)
free(original[i]);
free(original);
return newArray;
}
答案 0 :(得分:0)
strlen
仅返回字符数。为零结尾留出空间
*(newArray + i) = (char*)malloc(sizeof(char)*(strlen(*(original + i))) +1);
最好使用strncpy
而不是strcpy
如何在*size
中newArray
前进:
*(newArray + (*size)) = (char*)malloc(sizeof(char)*strlen(number));
您只能向前*size -1
,因为它从零开始。
在for
循环中,您似乎忘记了添加星号*
for (int i = 0; i < size; i++)
答案 1 :(得分:0)
您释放了太多的原始内存。
释放内存时查看for循环:
(*size)++;
//delocating the allocated memories
for (int i = 0; i < size; i++)
free(original[i]);
由于size
是int *
,因此您将获得大量迭代,这将释放比您分配的更多的内存。要解决此问题,请执行以下操作:
(*size)++;
//delocating the allocated memories
for (int i = 0; i < *size; i++)
free(original[i]);
现在,由于添加新元素时增加了* size,因此您仍然要释放过多的元素。释放原始内存的最终版本是
(*size)++;
//delocating the allocated memories
for (int i = 0; i < *size - 1; i++)
free(original[i]);
答案 2 :(得分:0)
您可以改用realloc
setProgressViewOffset
示例正确用法
setProgressViewOffset (boolean scale, int start, int end)