根据这个问题:我什么时候应该在C中使用malloc,什么时候不应该?
使用malloc分配内存应该可以让我更改数组中的字符之一。但是,该程序在运行时崩溃。有人可以请教吗?(还会free(ptr)
导致其他崩溃,这就是为什么它被注释掉了)。
char* ptr;
ptr = (char *)malloc(sizeof(char[10]));
ptr = "hello";
ptr[0] = 'H';
printf("The string contains: %s\n", ptr);
//free (ptr);
return 0;
您的程序崩溃,因为这一行
ptr = "hello";
完全取消malloc
上一行的效果:
ptr = malloc(sizeof(char[10])); // No need to cast to char*
并且还会在此过程中造成内存泄漏,因为malloc
赋值后返回的地址将不可恢复地丢失。
分配完成后,尝试进行设置会ptr[0] = 'H'
导致崩溃,因为您正在尝试修改字符串文字本身的内存-即未定义的行为。
如果要在以后修改它们,则需要复制C语言中的字符串,而不分配它们。用strcpy
呼叫替换任务,以解决此问题。
strcpy(ptr, "hello");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句