[英]Seg Fault when allocating memory and setting values to 3D array
我想创建一个包含 26 个单词数组的数组(按第一个字母对我的单词列表进行排序),所以我相信我相应地分配了内存,但是当我尝试测试运行并尝试为每个位置设置一个随机单词“hi”时必须有一个词,它只适用于前 5 个字母,然后返回一个设置错误。 请原谅我的代码或描述,我是初学者。 帮助
注意:我的两个参数都是在外部函数中定义的,wordArray 是给定文本文件中的单词数组,numWordsPerLetter 是一个整数数组,其中包含以字母表中每个字母开头的单词数。
char*** create_alphabetical_array(char** wordArray, int* numWordsPerLetter){
char*** alphabeticalArrays;
int i, j;
alphabeticalArrays = malloc(sizeof(char**)*26);
for (i = 0; i < 26; i++){
printf("%d\n", numWordsPerLetter[i]+1);
alphabeticalArrays[i] = malloc(sizeof(char*)*numWordsPerLetter[i]+1);
}
for (i = 0; i < 26; i++){
for (j = 0; j < (numWordsPerLetter[i]+1); j++){
printf("%d %d %d\n", i, j, numWordsPerLetter[i]+1); /* using to help debug */
strcpy(alphabeticalArrays[i][j], "hi");
}
}
return (alphabeticalArrays);
}
至少有这两个错误:
错误的元素大小和错误的n
。 alphabeticalArrays[i]
是一个char **
,所以sizeof(int)
是错误的。 element_size * numWordsPerLetter[i]+1
应该是element_size * (numWordsPerLetter[i]+1)
最好使用p = malloc(sizeof *p * n)
,然后p = malloc(sizeof *(type-of p) * n)
。 更容易正确编码、审查和维护。
// alphabeticalArrays[i] = malloc(sizeof(int)*numWordsPerLetter[i]+1);
alphabeticalArrays[i] = malloc(sizeof alphabeticalArrays[i][0] * (numWordsPerLetter[i]+1));
// ^---Element size--------------^ ^-------------N--------^
strcpy(alphabeticalArrays[i][j], "hi");
失败,因为alphabeticalArrays[i][j]
未分配的指针分配的存储器的字符串"hi"
。 @Zelnes
alphabeticalArrays[i][j] = malloc(strlen("hi") + 1);
替代方案:研究strdup()
。
健壮的代码还会检查分配是否成功。
p = malloc(n);
if (p == NULL) Handle_Failure();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.