我试图使用一个函数定义和初始化字符串数组,但是,该函数在为每个指针分配内存时导致分段错误。
请在下面找到该代码的最低可复制版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define COL 100
#define ROW 10
int init_arr(char ***arr_ptr) {
*arr_ptr = malloc(sizeof(char *) * ROW);
for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
*arr_ptr[temp_iter] = malloc(COL + 1);
strncpy(*arr_ptr[temp_iter], "MY_STRING_IS_THIS", COL);
}
return 0;
}
int main() {
char **arr_of_str = NULL;
init_arr(&arr_of_str);
for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
printf("\nData: %s", arr_of_str[temp_iter]);
}
}
当该函数拆分为2,第一个函数定义它,第二个函数初始化它时,此代码可以正常工作。
问题出在这里*arr_ptr[temp_iter]
,首先取消引用(在他的情况下为订阅)是在方括号中,然后是从asterix。您想要做的就是将这些取消引用分开,以便首先应用asterix,然后使用from框括起来,如下所示:
int init_arr(char*** arr_ptr) {
*arr_ptr = (char**) malloc(sizeof(char *) * ROW);
for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
(*arr_ptr)[temp_iter] = (char*) malloc(COL + 1);
strncpy((*arr_ptr)[temp_iter], "MY_STRING_IS_THIS", COL);
}
return 0;
}
另外,由于malloc总是返回void *,因此您需要将指针从malloc转换为适当的指针,并且稍后将取消引用void指针。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句