无法读取malloc创建的字符串

时间:2016-07-16 20:41:31

标签: c pointers malloc

我有一个函数接收char数组的指针作为参数(char ** messageErreur)。该指针是在main中创建的,但没有分配内存,因为它只在必要时创建(显示错误消息)(此处没有选择,该方法来自不可更改的.h文件)。

这是我得到分段错误的代码:

imageMsgErr (messageErreur, "error message");
printf("erreur1 P2\n");
printf("message erreur %s\n", *messageErreur); //**where i get the seg fault


void imageMsgErr (char** messageErreur, char* msg){

    messageErreur= (char**)malloc(sizeof(char*));
    messageErreur[0]= (char*)malloc(sizeof (char) * 100);

    if (*messageErreur){
        printf("before strcpy\n");
        strcpy(*messageErreur, msg);
        printf("message erreur %s\n", *messageErreur);
    }
    return;

我尝试了几个相似的代码,结果相同:执行行时出现分段错误:

printf("message erreur %s\n", *messageErreur);

1 个答案:

答案 0 :(得分:0)

该行

messageErreur= (char**)malloc(sizeof(char*));

仅在函数中更改messageErreur在本地指向的位置。它不会改变调用函数中相应变量指向的位置。

解决此问题的一种简单方法是稍微更改功能。

char** imageMsgErr (char* msg)
{
   char** messageErreur = malloc(sizeof(char*));
   messageErreur[0]= malloc(sizeof (char) * 100);

   if (*messageErreur){
      printf("before strcpy\n");
      strcpy(*messageErreur, msg);
      printf("message erreur %s\n", *messageErreur);
   }
   return messageErreur;
}

并将通话更改为:

messageErreur = imageMsgErr("error message");

<强> PS

请参阅Do I cast the result of malloc?