gpt4 book ai didi

c - malloc.c : No such file or directory

转载 作者:行者123 更新时间:2023-11-30 19:16:06 26 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个程序,它接受输入流并根据字符串中空格的出现来中断输入,并从中创建一个二维数组。例如

如果输入是:

这是猫

输出:

这个


我的代码如下:

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

int main(){
int ** a;
int * element;
int i;
int size = 2;
int element_size = 2;
int element_count = 0;
char c;
int flag = 0;

if((a = (int **)calloc(size, sizeof(int **))) == NULL){
printf("Not enough space");
exit(0);
}
for(i = 0; i <= size; i++){
element_size = 2;
element_count = 0;
flag = 0;
if(i >= size){
size *= 2;
if((a = (int **)realloc(size, sizeof(int **))) == NULL){
printf("Not enough space");
exit(0);
}
}
if((element = (int *)calloc(element_size, sizeof(int *))) == NULL){
printf("Not enough space");
exit(0);
}
while(1){
c = getchar();
if(element_count >= element_size){
element_size *= 2;
if((element = (int *)realloc(element_size, sizeof(int *))) == NULL);
}
if(c == ' '){
flag = 0;
break;
}
else if(c == '\n' || c == '\0' || c == '\r'){
flag = 1;
break;
}
else{
element[element_count] = (char)c;
element_count++;
}
}
element[element_count] = '\0';
*a[i] = element;
if(flag == 1)break;
}
for( i = 0; i < size; i++){
printf("%s\n", *a[i]);
}
return 0;
}

此代码在 coredump 中给出运行时错误 SIGSEV

使用 gdb 分析核心转储显示:

程序因信号 SIGSEGV(段错误)而终止。 #0 __GI___libc_realloc(oldmem=0x4,字节=8)位于 malloc.c:2977
2977 malloc.c:没有这样的文件或目录。

这个错误是什么意思?

如果有人能够指出我的代码中的错误或任何新的方法,这将非常有帮助。

最佳答案

for(i = 0; i <= size; i++)

应该是

for(i = 0; i < size; i++)

a = (int **)calloc(size, sizeof(int **))) 

应该是

a = calloc(size, sizeof(int *))) 

i<=size您正在越界访问并具有未定义的行为。

int **a是一个指向指针的整数指针,您需要为指针分配内存,即 int *

关于c - malloc.c : No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008718/

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