我有一个函数接收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);
答案 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 强>