我在使用字符串分配内存时遇到了麻烦

时间:2014-06-20 02:11:08

标签: c string pointers malloc

我在程序的分配内存部分遇到问题。我应该读取包含名称列表的文件,然后为它们分配内存并将它们存储在分配内存中。这是我到目前为止所做的,但是当我运行它时,我一直遇到分段错误。

#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);
}

目前无法正常工作,因为我遇到了段故障。非常感谢您的帮助。

2 个答案:

答案 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进来的地方