gpt4 book ai didi

c - 我的项目在尝试使用双重间接指针(char **)时崩溃

转载 作者:行者123 更新时间:2023-11-30 17:08:52 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define N 8

void func (char* ch,char **c1_a,char **c2_a,int* c1_s,int* c2_s)
{
char* c2_a;
int i;
for(i=0; i<N; i++)
{
if(ch[i] >= 'A' && ch[i] <= 'Z')
(*c1_s)++;
}
*c2_s = N - *c1_s;
*c1_a = (char*)malloc((*c1_s)*sizeof(char));
*c2_a = (char*)malloc((*c2_s)*sizeof(char));

*c1_s=*c2_s=0;

for(i=0;i<N;i++)
{
if(ch[i] >= 'A' && ch[i] <= 'Z')
{
(**c1_a)[c1_s] = ch[i];
(*c1_s)++;
}
else
{
(**c2_a)[c2_s] = ch[i];
(*c2_s)++;
}
}

}

void main ()
{
char ch[N] = {'A','c','Z','D','G','h','i','Q'};
char* c1_a,*c2_a;
int c1_s, c2_s,i;

func(ch,&c1_a,&c2_a,&c1_s,&c2_s);

printf("Address for Capital is %d and letters are:\n",c1_a);
for(i=0;i<c1_s;i++)
{
printf("%c",c1_a[i]);
}
printf("Address for Small is %d and letters are:\n",c2_a);
for(i=0;i<c2_s;i++)
{
printf("%c",c2_a[i]);
}



}

我检查了 F11,它说一旦我到达线路就会崩溃:

*c1_a = (char*)malloc((*c1_s)*sizeof(char));

我有一个具有相同想法的项目,只是用数字代替,并且不知何故它有效。

最佳答案

在 main 和您的函数中,您都不会初始化变量。因为它们是自动变量,所以它们可以具有任何值:

主要内容:

char* c1_a,*c2_a;
int c1_s, c2_s,i;

func(ch,&c1_a,&c2_a,&c1_s,&c2_s);

在函数中:

*c2_s = N - *c1_s;
*c1_a = (char*)malloc((*c1_s)*sizeof(char));
*c2_a = (char*)malloc((*c2_s)*sizeof(char));

例如,在 main c1_s 中未初始化,因此在 func *c1_s 中具有随机值,等等...

我还注意到,在 func 中,您有一个局部变量 char* c2_a。这将覆盖函数标题中具有相同名称的参数。

关于c - 我的项目在尝试使用双重间接指针(char **)时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com