【发布时间】:2015-06-21 22:56:18
【问题描述】:
我在处理 C 中的一维和二维动态分配数组时遇到了问题。我发现了类似的问题,但是没有一个对我有帮助,所以我要问一个新问题。
- C and pointer in a function - changes do not save
- C implementention of strcpy does not change variable value
- Changing address contained by pointer using function
这是我的问题。使用下面的函数,我想将一个新元素添加到二维 char 数组中。大小不是问题,我在外面的某个地方增加。
void addElem(char ***tabs, int size, char *new) {
*tabs[size] = (char*)malloc(sizeof(char)*strlen(new));
*tabs[size] = new;
*tabs = (char **)realloc(*tabs, size * sizeof(char *));
}
在代码中,函数是这样调用的:
int i;
char *tmp;
char **array = (char **)malloc(sizeof(char *));
//some stuff, also initializing i and tmp
addElem(&array, i, tmp);
问题是该函数即使分配了数据,它也不会在那里保存任何数据(例如,strcmp 使用 **array 给出 SIGSEGV)。在调试类似函数(管理一维整数数组)时,我发现它们实际上在这些函数内部正常工作,只是返回后数据没有保存。
我尝试显示尽可能少的代码,但如果有帮助,here 是完整代码(将 addElem 函数重命名为 dodajDoTablicySlow)。谢谢。
【问题讨论】:
-
建议:1)不要投
malloc()的返回值2)不要成为三星级程序员。 -
您的
strlen()函数中的nowy来自哪里?