【发布时间】:2021-04-09 11:08:16
【问题描述】:
#include<stdlib.h>
#include<string.h>
int main ( void )
{
char *title=NULL;
title = (char *) malloc(15);
strcpy(title, "C Programming");
printf("String = %c", *title);
free(title);
// title=NULL; //or title = 0;
strcpy(title, "C++");
printf(" %s", title);
return 0;
}
当我取消注释“title=NULL”行时,程序因分段错误而崩溃;有人可以解释一下这种行为吗
否则打印“String = C C++”
【问题讨论】:
-
title=NULL;是为了避免您刚刚面临的行为,您为什么要在不应该的情况下尝试使某些东西起作用,您需要再次malloc使其起作用,因为您free'd 以前的记忆 -
free(title); // title=NULL; //or title = 0; strcpy(title, "C++");您正在使用您释放的内存。因此,您遇到了分段错误 - 这是您在使用不属于您的内存时遇到的错误。 -
@IrAM 告诉程序的输出是一个 MCQ 问题,我只是想知道将字符串复制到该指针时出了什么问题。
-
strcpy(title, "C++");导致未定义的行为,当title已被释放且未设置为NULL时(未定义的行为包括“显然工作正常”)。strcpy(NULL, "C++");虽然是未定义的行为,但在几乎任何现代系统上都会出现段错误。 -
输出为:未定义
标签: c null-pointer dangling-pointer