[英]Char Pointer allocation within a function - Segmentaion fault
我试图将内存分配给函数内的char指针。 但是for cycle at i=1
的for cycle at i=1
在函数内部遇到分段错误。 对于i=0
它分配内存。 我正在努力解决这个问题。 也许其他“眼睛”可以看到问题所在。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void AllocateDeallocate(int, int, int, char***);
int main(void)
{
char** header1;
char** header2;
AllocateDeallocate(1,3,40,&header1);
return 0;
}
void AllocateDeallocate(int iopt, int nStr, int StrLen, char*** Str)
{
int i;
switch (iopt)
{
case 1:
if (NULL == Str)
{
exit(EXIT_FAILURE);
}
if(*Str == NULL)
{
*Str = (char**)malloc(sizeof(char*)*nStr);
if (*Str== NULL)
{
puts("Memory allocation failed.");
exit(EXIT_FAILURE);
}
}
for(i = 0 ; i< nStr;i++)
{
printf("String %d allocation\n",i);
*Str[i] = (char*)malloc(sizeof(char)*(StrLen+1));
if (*Str[i] == NULL)
{
puts("Memory allocation failed.");
exit(EXIT_FAILURE);
}
}
break;
case 2:
for( i = 0; i<nStr; i++)
{
free(*Str[i]);
}
free(*Str);
break;
default:
printf("Wrong Option");
}
}
当您调用函数AllocateDeallocate
,变量header1
尚未初始化。 这意味着函数*Str
内有一个不确定的值(并且似乎是随机的)。
然后,当您使用*Str
(例如,在*Str == NULL
)时,将导致出现问题(因为该值很可能不等于NULL
)。
简单的解决方案? 在main
函数中初始化变量:
char** header1 = NULL;
char** header2 = NULL;
解决上述问题后,您还会遇到其他问题。 就像您做*Str[i]
。 由于运算符优先级规则,它等于*(Str[i])
,这不是您想要的。 您需要显式使用括号来具有(*Str)[i]
。
以上两个问题都将导致不确定的行为,并且很可能导致崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.