我在程序的分配内存部分遇到问题。我应该读取包含名称列表的文件,然后为它们分配内存并将它们存储在分配内存中。这是我到目前为止所做的,但是当我运行它时,我一直遇到分段错误。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LEN 25
void allocate(char ***strings, int size);
int main(int argc, char* argv[]){
char **pointer;
int size = atoi(argv[1]);
allocate(&pointer, size);
}
/*Will allocate memory for an array of char
pointers and then allocate those char pointers with the size of MAX_STRING_LEN.*/
void allocate(char ***strings, int size){
**strings = malloc( sizeof (char) * MAX_STRING_LEN);
}
目前无法正常工作,因为我遇到了段故障。非常感谢您的帮助。
答案 0 :(得分:2)
void allocate(char ***strings, int size)
{
int i;
// Here you allocate "size" string pointers...
*strings = malloc( sizeof (char*) * size);
// for each of those "size" pointers allocated before, here you allocate
//space for a string of at most MAX_STRING_LEN chars...
for(i = 0; i < size; i++)
(*strings)[i] = malloc( sizeof(char) * MAX_STRING_LEN);
}
所以,如果你将大小传递给10 ......
在你的主体中,你将有10个字符串的空间(指针[0]到指针[9])。
每个字符串最多可包含24个字符(不要忘记空终止符)...
指针有点棘手,但这是一个处理它们的技巧:
让我们说你的主人是这样的:
int main()
{
int ***my_variable;
}
你知道如何在主 ...
中的my_variable中操作要在您执行的功能中使用它,请执行以下操作:
在参数
中添加额外的*void f(int ****my_param)
无论何时你想在函数中使用它,都要像在main中使用一样进行这个小改动:
(*my_param) = //some code
使用(* my_param)与使用 my_variable 在主
中相同答案 1 :(得分:0)
你需要
*strings = malloc(sizeof(char *) * 10); // Here is the array
(*strings)[0] = malloc(MAX_STRING_LEN);
strcpy((*strings)[0], "The first person");
printf("First person is %s\n", (*strings)[0]);
Dunno size
进来的地方