gpt4 book ai didi

c - 重新分配()失败

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:02 24 4
gpt4 key购买 nike

我试图实现一个简单的函数,该函数可以连接传递给它的任意数量的字符串。我对 realloc 的调用失败了。这是否与我传递给函数的字符串参数存储在数据段中有关,因为 realloc 看起来从堆中分配内存?这只是我的一个想法。我是初学者,所以如果看起来很愚蠢,请原谅。我怎样才能让这个功能运行?

 //Program to implement a function that can concatenate any number of argumnets 

#include<stdio.h>
#include<stdarg.h>
#include<string.h>
#include<stdlib.h>

char *mstrcat(char *first, ...);
int main(int argc, int **argv){
char *s;
s=mstrcat("I ","Love ","Stack","Overflow");
printf("%s\n",s);
}
char *mstrcat(char *first, ...){
char *s=first,*p;
int len=0; // stores the length of the string as it grows
len=strlen(s);
va_list aptr; // creates a pointer to the unnamed argument list
va_start(aptr,first); // initialise aptr to the first unnamed argument
if(aptr==NULL){
return s;
}
while((p=va_arg(aptr,char *))!=NULL){ // till there are no more arguments to process
len+=strlen(p);
if((s=(char *)realloc(s,len+1))!=NULL){
strcat(s,p);
}
else{
printf("Failed to concatenate\n");
return first;
}
}
return s;
}

最佳答案

您的代码有一个未定义的行为。标准要求传递给 realloc 的指针应该与使用内存管理函数分配动态内存的指针完全匹配。标准规定的内存管理函数有:
aligned_alloccallocmallocrealloc

您传递给 realloc() 的指针没有被任何一个返回,因此没有返回未定义的行为。

引用:
c99标准:7.22.3.5 realloc函数

概要:#1

#include <stdlib.h>
void *realloc(void *ptr, size_t size);

#3

If ptr is a null pointer, the realloc function behaves like the malloc function for the specified size. Otherwise, if ptr does not match a pointer earlier returned by a memory management function, or if the space has been deallocated by a call to the free or realloc function, the behavior is undefined. If memory for the new object cannot be allocated, the old object is not deallocated and its value is unchanged.

关于c - 重新分配()失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092986/

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